diff options
author | fcolin | 2009-10-15 10:26:27 +0000 |
---|---|---|
committer | fcolin | 2009-10-15 10:26:27 +0000 |
commit | 473bf59297a9c8010fb35f505c872024ae3d259d (patch) | |
tree | ba296d860b9ecda9101b76f1eea4407daa997a38 /Ivy/ThreadedSocket.cxx | |
parent | 3bd1423d9bd7374c2d39f9817e3a1caa836f86e6 (diff) | |
download | ivy-cplusplus-473bf59297a9c8010fb35f505c872024ae3d259d.zip ivy-cplusplus-473bf59297a9c8010fb35f505c872024ae3d259d.tar.gz ivy-cplusplus-473bf59297a9c8010fb35f505c872024ae3d259d.tar.bz2 ivy-cplusplus-473bf59297a9c8010fb35f505c872024ae3d259d.tar.xz |
correction bug threaded IvyApplication
correction checkconnected self
Diffstat (limited to 'Ivy/ThreadedSocket.cxx')
-rw-r--r-- | Ivy/ThreadedSocket.cxx | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/Ivy/ThreadedSocket.cxx b/Ivy/ThreadedSocket.cxx index 03b062e..99caa80 100644 --- a/Ivy/ThreadedSocket.cxx +++ b/Ivy/ThreadedSocket.cxx @@ -159,21 +159,32 @@ void CThreadedSocket::Close() //ASSERT(SOCKET_ERROR != closesocket(m_hSocket));
SOCKET temp = m_hSocket; // Thread ACK
m_hSocket = INVALID_SOCKET;
- TRACE( "CThreadedSocket::Close (reader=0x%0lx) (writer=0x%0lx)\n", reader_id, writer_id );
+ TRACE( "CThreadedSocket::Close (current=0x%0lx) (reader=0x%0lx) (writer=0x%0lx)\n", currentThreadId, reader_id, writer_id );
closesocket(temp); // close silently
//if ( thread ) // On fait de l'auto delete mais dans le cas de terminaison anormale l'object reste ????!!!
// delete thread;
-// TRACE("CThreadedSocket waiting for thread end ...\n");
if ( h_reader && currentThreadId != reader_id )
- WaitForSingleObject( h_reader, 5000 );
+ {
+ TRACE("CThreadedSocket waiting for thread end (reader=0x%0lx)...\n",reader_id);
+ DWORD res = WaitForSingleObject( h_reader, INFINITE );
+ if ( res != WAIT_OBJECT_0 )
+ {
+ TRACE("CThreadedSocket waiting for thread end (reader=0x%0lx) error 0x%0lx lasterror 0x%0lx\n",reader_id,res, ::GetLastError());
+ }
+ }
// wake up writer
if ( h_writer && currentThreadId != writer_id )
{
+ TRACE("CThreadedSocket waiting for thread end (writer=0x%0lx)...\n",writer_id);
err = ReleaseSemaphore(send_count, 1, &PreviousCount);
- WaitForSingleObject( h_writer, 5000 );
+ DWORD res = WaitForSingleObject( h_writer, INFINITE );
+ if ( res != WAIT_OBJECT_0 )
+ {
+ TRACE("CThreadedSocket waiting for thread end (writer=0x%0lx) error 0x%0lx lasterror 0x%0lx\n",writer_id,res, ::GetLastError());
}
-// TRACE("CThreadedSocket all thread ended\n");
+ }
+ TRACE("CThreadedSocket all thread ended (reader=0x%0lx) (writer=0x%0lx)\n", reader_id, writer_id);
}
}
int CThreadedSocket::Listen(int nConnectionBacklog)
@@ -452,6 +463,12 @@ UINT CThreadedSocket::SocketReader( ) FD_SET(m_hSocket, &exceptfds);
err = select( 1, &readfds, &writefds, &exceptfds, NULL );
+ if (m_hSocket == INVALID_SOCKET)
+ {
+ TRACE( "CThreadedSocket::SocketThread no more Socket *********** !thread_id =( 0x%x) \n",reader_id);
+ return -1;
+ }
+
sock_err = this->GetLastError();
switch ( err )
|