- attempt to improve mutex locking in irc client code to avoid dead locks
This commit is contained in:
parent
55a27b4c6b
commit
3647a610cc
|
@ -680,6 +680,7 @@ bool IRCThread::isConnected(bool mutexLockRequired) {
|
||||||
safeMutex1.setMutex(&mutexIRCSession);
|
safeMutex1.setMutex(&mutexIRCSession);
|
||||||
}
|
}
|
||||||
ret = (irc_is_connected(ircSession) != 0);
|
ret = (irc_is_connected(ircSession) != 0);
|
||||||
|
safeMutex1.ReleaseLock();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -907,6 +908,7 @@ int IRCThread::irc_run_session(irc_session_t * session) {
|
||||||
|
|
||||||
safeMutex.Lock();
|
safeMutex.Lock();
|
||||||
if ( irc_process_select_descriptors (session, &in_set, &out_set) ) {
|
if ( irc_process_select_descriptors (session, &in_set, &out_set) ) {
|
||||||
|
safeMutex.ReleaseLock();
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -997,6 +999,7 @@ void IRCThread::connectToHost() {
|
||||||
if(result != 1) {
|
if(result != 1) {
|
||||||
connectRequired = true;
|
connectRequired = true;
|
||||||
}
|
}
|
||||||
|
safeMutex1.ReleaseLock();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1004,9 +1007,12 @@ void IRCThread::connectToHost() {
|
||||||
#if !defined(DISABLE_IRCCLIENT)
|
#if !defined(DISABLE_IRCCLIENT)
|
||||||
MutexSafeWrapper safeMutex1(&mutexIRCSession,string(__FILE__) + "_" + intToStr(__LINE__));
|
MutexSafeWrapper safeMutex1(&mutexIRCSession,string(__FILE__) + "_" + intToStr(__LINE__));
|
||||||
if(irc_connect(ircSession, argv[0].c_str(), IRC_SERVER_PORT, 0, this->nick.c_str(), this->username.c_str(), "megaglest")) {
|
if(irc_connect(ircSession, argv[0].c_str(), IRC_SERVER_PORT, 0, this->nick.c_str(), this->username.c_str(), "megaglest")) {
|
||||||
|
safeMutex1.ReleaseLock();
|
||||||
|
|
||||||
if(SystemFlags::VERBOSE_MODE_ENABLED || IRCThread::debugEnabled) printf ("===> IRC Could not connect: %s\n", irc_strerror (irc_errno(ircSession)));
|
if(SystemFlags::VERBOSE_MODE_ENABLED || IRCThread::debugEnabled) printf ("===> IRC Could not connect: %s\n", irc_strerror (irc_errno(ircSession)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
safeMutex1.ReleaseLock();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1031,7 +1037,9 @@ void IRCThread::joinChannel() {
|
||||||
lastNickListUpdate = time(NULL);
|
lastNickListUpdate = time(NULL);
|
||||||
|
|
||||||
irc_cmd_join(ircSession, ctx->getChannel().c_str(), 0);
|
irc_cmd_join(ircSession, ctx->getChannel().c_str(), 0);
|
||||||
|
safeMutex.ReleaseLock();
|
||||||
}
|
}
|
||||||
|
safeMutex.ReleaseLock();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1050,7 +1058,9 @@ void IRCThread::leaveChannel() {
|
||||||
IRCThread *ctx = (IRCThread *)irc_get_ctx(ircSession);
|
IRCThread *ctx = (IRCThread *)irc_get_ctx(ircSession);
|
||||||
if(ctx != NULL) {
|
if(ctx != NULL) {
|
||||||
irc_cmd_part(ircSession,ctx->getChannel().c_str());
|
irc_cmd_part(ircSession,ctx->getChannel().c_str());
|
||||||
|
safeMutex.ReleaseLock();
|
||||||
}
|
}
|
||||||
|
safeMutex.ReleaseLock();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue