I still think that the way we process incoming MUD data could be suspect in that (void)cTelnet::handle_socket_signal_readyRead() is a SLOT that is coupled to an asynchronous SIGNAL generated by a separate (Qt provided) network thread that manages (QTcpSocket)cTelnet::socket so we have to be careful to make any class members it modifies be used in a re-entrant or is that thread-safe manner? I.e.:
Safe-ish probably only because they are not modified frequently:
(bool)cTelnet::mMCCP_version_1
(bool)cTelnet::mMCCP_version_2
(bool)cTelnet::mFORCE_GA_OFF
(bool)cTelnet::mGA_Driver
(bool)cTelnet::mLF_ON_GA
(bool)cTelnet::mNeedDecompression
(bool)TConsole::mRecordReplay
Note that "command" in void cTelnet::processTelnetCommand(const string &) is a local variable {the passed argument, NOT the class member of the same name which it masks - tut, tut!}
I still think that the way we process incoming MUD data could be suspect in that (void)cTelnet: :handle_ socket_ signal_ readyRead( ) is a SLOT that is coupled to an asynchronous SIGNAL generated by a separate (Qt provided) network thread that manages (QTcpSocket) cTelnet: :socket so we have to be careful to make any class members it modifies be used in a re-entrant or is that thread-safe manner? I.e.:
Looks contentious: :mInsertedMissi ngLF :recvdGA cTelnet: :command
(bool)Host:
(bool)cTelnet:
(bool)cTelnet::iac
(bool)cTelnet::iac2
(bool)cTelnet::insb
(std::string)
Safe-ish probably only because they are not modified frequently: :mMCCP_ version_ 1 :mMCCP_ version_ 2 :mFORCE_ GA_OFF :mGA_Driver :mLF_ON_ GA :mNeedDecompres sion :mRecordReplay
(bool)cTelnet:
(bool)cTelnet:
(bool)cTelnet:
(bool)cTelnet:
(bool)cTelnet:
(bool)cTelnet:
(bool)TConsole:
Probably safe: :mWaitingForRes ponse cTelnet: :timeOffset cTelnet: :networkLatency Time cTelnet: :networkLatency
(bool)cTelnet:
(QTime)
(QTime)
(double)
Note that "command" in void cTelnet: :processTelnetC ommand( const string &) is a local variable {the passed argument, NOT the class member of the same name which it masks - tut, tut!}