mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-01-11 23:49:38 -05:00
RsThread fix warning and cleanup
Avoid compiler warning due to virtual method being called in destructor at this point the empty default version would be called without damage but making the compiler concernig about the semantic being different from the one the programmer meant. Delete old superseeded function and do not depend on it on RsThread.
This commit is contained in:
parent
9b2504d407
commit
16ca0dc52c
@ -507,8 +507,7 @@ HEADERS += util/folderiterator.h \
|
||||
util/cxx11retrocompat.h \
|
||||
util/cxx14retrocompat.h \
|
||||
util/cxx17retrocompat.h \
|
||||
util/rsurl.h \
|
||||
util/rserrno.h
|
||||
util/rsurl.h
|
||||
|
||||
SOURCES += ft/ftchunkmap.cc \
|
||||
ft/ftcontroller.cc \
|
||||
@ -646,8 +645,7 @@ SOURCES += util/folderiterator.cc \
|
||||
util/rsrecogn.cc \
|
||||
util/rstime.cc \
|
||||
util/rsurl.cc \
|
||||
util/rsbase64.cc \
|
||||
util/rserrno.cc
|
||||
util/rsbase64.cc
|
||||
|
||||
equals(RS_UPNP_LIB, miniupnpc) {
|
||||
HEADERS += rs_upnp/upnputil.h rs_upnp/upnphandler_miniupnp.h
|
||||
|
@ -1,54 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* libretroshare/src/util: rserrno.cc *
|
||||
* *
|
||||
* libretroshare: retroshare core library *
|
||||
* *
|
||||
* Copyright (C) 2019 Gioacchino Mazzurco <gio@eigenlab.org> *
|
||||
* *
|
||||
* This program is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Lesser General Public License *
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>. *
|
||||
* *
|
||||
*******************************************************************************/
|
||||
|
||||
#include <cerrno>
|
||||
|
||||
#define RS_INTERNAL_ERRNO_CASE(e) case e: return #e
|
||||
|
||||
const char* rsErrnoName(int err)
|
||||
{
|
||||
switch (err)
|
||||
{
|
||||
RS_INTERNAL_ERRNO_CASE(EINVAL);
|
||||
RS_INTERNAL_ERRNO_CASE(EBUSY);
|
||||
RS_INTERNAL_ERRNO_CASE(EAGAIN);
|
||||
RS_INTERNAL_ERRNO_CASE(EDEADLK);
|
||||
RS_INTERNAL_ERRNO_CASE(EPERM);
|
||||
RS_INTERNAL_ERRNO_CASE(EBADF);
|
||||
RS_INTERNAL_ERRNO_CASE(EFAULT);
|
||||
RS_INTERNAL_ERRNO_CASE(ENOTSOCK);
|
||||
RS_INTERNAL_ERRNO_CASE(EISCONN);
|
||||
RS_INTERNAL_ERRNO_CASE(ECONNREFUSED);
|
||||
RS_INTERNAL_ERRNO_CASE(ETIMEDOUT);
|
||||
RS_INTERNAL_ERRNO_CASE(ENETUNREACH);
|
||||
RS_INTERNAL_ERRNO_CASE(EADDRINUSE);
|
||||
RS_INTERNAL_ERRNO_CASE(EINPROGRESS);
|
||||
RS_INTERNAL_ERRNO_CASE(EALREADY);
|
||||
RS_INTERNAL_ERRNO_CASE(ENOTCONN);
|
||||
RS_INTERNAL_ERRNO_CASE(EPIPE);
|
||||
RS_INTERNAL_ERRNO_CASE(ECONNRESET);
|
||||
RS_INTERNAL_ERRNO_CASE(EHOSTUNREACH);
|
||||
RS_INTERNAL_ERRNO_CASE(EADDRNOTAVAIL);
|
||||
}
|
||||
|
||||
return "rsErrnoName UNKNOWN ERROR CODE";
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* libretroshare/src/util: rserrno.h *
|
||||
* *
|
||||
* libretroshare: retroshare core library *
|
||||
* *
|
||||
* Copyright (C) 2019 Gioacchino Mazzurco <gio@eigenlab.org> *
|
||||
* *
|
||||
* This program is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Lesser General Public License *
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>. *
|
||||
* *
|
||||
*******************************************************************************/
|
||||
#pragma once
|
||||
|
||||
const char* rsErrnoName(int err);
|
@ -4,8 +4,8 @@
|
||||
* libretroshare: retroshare core library *
|
||||
* *
|
||||
* Copyright (C) 2004-2007 Robert Fernie <retroshare@lunamutt.com> *
|
||||
* Copyright (C) 2016-2020 Gioacchino Mazzurco <gio@eigenlab.org> *
|
||||
* Copyright (C) 2019-2020 Asociación Civil Altermundi <info@altermundi.net> *
|
||||
* Copyright (C) 2016-2021 Gioacchino Mazzurco <gio@eigenlab.org> *
|
||||
* Copyright (C) 2019-2021 Asociación Civil Altermundi <info@altermundi.net> *
|
||||
* *
|
||||
* This program is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
@ -25,7 +25,6 @@
|
||||
#include "rsthreads.h"
|
||||
|
||||
#include "util/rsdebug.h"
|
||||
#include "util/rserrno.h"
|
||||
|
||||
#include <chrono>
|
||||
#include <ctime>
|
||||
@ -96,7 +95,8 @@ void RsThread::resetTid()
|
||||
#endif
|
||||
}
|
||||
|
||||
RsThread::RsThread() : mInitMtx("RsThread"), mHasStopped(true), mShouldStop(false), mLastTid()
|
||||
RsThread::RsThread() : mInitMtx("RsThread"), mHasStopped(true),
|
||||
mShouldStop(false), mLastTid()
|
||||
#ifdef RS_THREAD_FORCE_STOP
|
||||
, mStopTimeout(0)
|
||||
#endif
|
||||
@ -122,13 +122,17 @@ void RsThread::wrapRun()
|
||||
}
|
||||
|
||||
void RsThread::fullstop()
|
||||
{
|
||||
askForStop();
|
||||
waitWhileStopping();
|
||||
}
|
||||
|
||||
void RsThread::waitWhileStopping()
|
||||
{
|
||||
#ifdef RS_THREAD_FORCE_STOP
|
||||
const rstime_t stopRequTS = time(nullptr);
|
||||
#endif
|
||||
|
||||
askForStop();
|
||||
|
||||
const pthread_t callerTid = pthread_self();
|
||||
if(pthread_equal(mTid, callerTid))
|
||||
{
|
||||
@ -170,7 +174,8 @@ void RsThread::fullstop()
|
||||
{
|
||||
RsErr() << __PRETTY_FUNCTION__ << " pthread_cancel("
|
||||
<< std::hex << mTid << std::dec <<") returned "
|
||||
<< terr << " " << rsErrnoName(terr) << std::endl;
|
||||
<< terr << " " << rs_errno_to_condition(terr)
|
||||
<< std::endl;
|
||||
print_stacktrace();
|
||||
}
|
||||
|
||||
@ -192,9 +197,8 @@ bool RsThread::start(const std::string& threadName)
|
||||
&mTid, nullptr, &rsthread_init, static_cast<void*>(this) );
|
||||
if(pError)
|
||||
{
|
||||
RsErr() << __PRETTY_FUNCTION__ << " pthread_create could not create"
|
||||
<< " new thread: " << threadName << " pError: " << pError
|
||||
<< std::endl;
|
||||
RS_ERR( "pthread_create could not create new thread: ", threadName,
|
||||
rs_errno_to_condition(pError) );
|
||||
mHasStopped = true;
|
||||
print_stacktrace();
|
||||
return false;
|
||||
@ -275,7 +279,7 @@ void RsMutex::lock()
|
||||
if( err != 0)
|
||||
{
|
||||
RsErr() << __PRETTY_FUNCTION__ << "pthread_mutex_lock returned: "
|
||||
<< rsErrnoName(err)
|
||||
<< rs_errno_to_condition(err)
|
||||
#ifdef RS_MUTEX_DEBUG
|
||||
<< " name: " << name()
|
||||
#endif
|
||||
@ -319,7 +323,11 @@ RsThread::~RsThread()
|
||||
<< "likely to crash because of this." << std::endl;
|
||||
print_stacktrace();
|
||||
|
||||
fullstop();
|
||||
/* Last resort attempt to stop the thread in a less pathological state.
|
||||
* Don't call fullstop() as it rely on virtual methods that at this
|
||||
* point are not anymore the one from inerithing classes causing
|
||||
* compilers to output a warning */
|
||||
waitWhileStopping();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,8 +4,8 @@
|
||||
* libretroshare: retroshare core library *
|
||||
* *
|
||||
* Copyright (C) 2004-2006 Robert Fernie <retroshare@lunamutt.com> *
|
||||
* Copyright (C) 2016-2020 Gioacchino Mazzurco <gio@eigenlab.org> *
|
||||
* Copyright (C) 2019-2020 Asociación Civil Altermundi <info@altermundi.net> *
|
||||
* Copyright (C) 2016-2021 Gioacchino Mazzurco <gio@eigenlab.org> *
|
||||
* Copyright (C) 2019-2021 Asociación Civil Altermundi <info@altermundi.net> *
|
||||
* *
|
||||
* This program is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
@ -261,7 +261,11 @@ private:
|
||||
/** Call @see run() setting the appropriate flags around it*/
|
||||
void wrapRun();
|
||||
|
||||
// To be sure Init (pthread_setname_np) is done before continue thread. Else can finish before and crash.
|
||||
/** Wait the thread while it is stopping */
|
||||
void waitWhileStopping();
|
||||
|
||||
/** To be sure Init (pthread_setname_np) is done before continue thread.
|
||||
* Else can finish before and crash. */
|
||||
RsMutex mInitMtx;
|
||||
|
||||
/// True if thread is stopped, false otherwise
|
||||
|
Loading…
Reference in New Issue
Block a user