summaryrefslogtreecommitdiff
path: root/Ivy/ThreadedSocket.cxx
diff options
context:
space:
mode:
authorfcolin2009-10-15 10:26:27 +0000
committerfcolin2009-10-15 10:26:27 +0000
commit473bf59297a9c8010fb35f505c872024ae3d259d (patch)
treeba296d860b9ecda9101b76f1eea4407daa997a38 /Ivy/ThreadedSocket.cxx
parent3bd1423d9bd7374c2d39f9817e3a1caa836f86e6 (diff)
downloadivy-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.cxx27
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 )