- pthread_mutex_lock(&m_mutex_input_data);
- m_stop_flag = true;
- pthread_cond_signal(&m_cond_input_data);
- pthread_mutex_unlock(&m_mutex_input_data);
-
- pthread_join(m_thread_id, 0);
-
- m_SocketObservable->deleteObserver(this);
-
- pthread_cond_destroy(&m_cond_input_data);
- pthread_mutex_destroy(&m_mutex_input_data);
- pthread_mutex_destroy(&m_mutex_output_data);
- close(m_fd[0]);
- close(m_fd[1]);
+#if YAZ_POSIX_THREADS
+ pthread_mutex_lock(&m_p->m_mutex_input_data);
+ m_p->m_stop_flag = true;
+ pthread_cond_broadcast(&m_p->m_cond_input_data);
+ pthread_mutex_unlock(&m_p->m_mutex_input_data);
+
+ int i;
+ for (i = 0; i<m_p->m_no_threads; i++)
+ pthread_join(m_p->m_thread_id[i], 0);
+ delete [] m_p->m_thread_id;
+
+ m_p->m_SocketObservable->deleteObserver(this);
+
+ pthread_cond_destroy(&m_p->m_cond_input_data);
+ pthread_mutex_destroy(&m_p->m_mutex_input_data);
+ pthread_mutex_destroy(&m_p->m_mutex_output_data);
+ close(m_p->m_fd[0]);
+ close(m_p->m_fd[1]);
+#endif
+
+ delete m_p;