diff --git a/dap-sdk/net/core/dap_events_socket.c b/dap-sdk/net/core/dap_events_socket.c index 78c3f3ea830199358ea7502cf52f84189176d5bb..1b0bee8d5b77f03a9a1d58ea7849a4d8e2532cc0 100644 --- a/dap-sdk/net/core/dap_events_socket.c +++ b/dap-sdk/net/core/dap_events_socket.c @@ -149,7 +149,6 @@ dap_events_socket_t *dap_events_socket_wrap_no_add( dap_events_t *a_events, if ( a_sock!= 0 && a_sock != -1){ pthread_rwlock_wrlock(&a_events->sockets_rwlock); #ifdef DAP_OS_WINDOWS - log_it(L_WARNING, "Hash add 0x%x", ret); HASH_ADD(hh,a_events->sockets, socket, sizeof(SOCKET), ret); #else HASH_ADD_INT(a_events->sockets, socket, ret); diff --git a/dap-sdk/net/stream/ch/dap_stream_ch.c b/dap-sdk/net/stream/ch/dap_stream_ch.c index d87c5833f46506f78e7e6fa10a6d816c9d297976..101b61c8887590d064a328f2245f43ca5d25a2ec 100644 --- a/dap-sdk/net/stream/ch/dap_stream_ch.c +++ b/dap-sdk/net/stream/ch/dap_stream_ch.c @@ -51,7 +51,7 @@ static struct dap_stream_ch_table_t { UT_hash_handle hh; } *s_ch_table = NULL; -static pthread_mutex_t s_ch_table_lock; +static pthread_rwlock_t s_ch_table_lock; /** * @brief stream_ch_init Init stream channel module @@ -67,7 +67,7 @@ int dap_stream_ch_init() log_it(L_CRITICAL,"Can't init stream channel packet submodule"); return -1; } - pthread_mutex_init(&s_ch_table_lock, NULL); + pthread_rwlock_init(&s_ch_table_lock, NULL); log_it(L_NOTICE,"Module stream channel initialized"); return 0; } @@ -77,7 +77,7 @@ int dap_stream_ch_init() */ void dap_stream_ch_deinit() { - pthread_mutex_destroy(&s_ch_table_lock); + pthread_rwlock_destroy(&s_ch_table_lock); } /** @@ -112,9 +112,9 @@ dap_stream_ch_t* dap_stream_ch_new(dap_stream_t* a_stream, uint8_t id) struct dap_stream_ch_table_t *l_new_ch = DAP_NEW_Z(struct dap_stream_ch_table_t); l_new_ch->ch = l_ch_new; - pthread_mutex_lock(&s_ch_table_lock); + pthread_rwlock_wrlock(&s_ch_table_lock); HASH_ADD_PTR(s_ch_table, ch, l_new_ch); - pthread_mutex_unlock(&s_ch_table_lock); + pthread_rwlock_unlock(&s_ch_table_lock); return l_ch_new; @@ -135,28 +135,25 @@ void dap_stream_ch_delete(dap_stream_ch_t *a_ch) HASH_DELETE(hh_worker,l_stream_worker->channels, a_ch); pthread_rwlock_unlock(&l_stream_worker->channels_rwlock); - pthread_mutex_lock(&s_ch_table_lock); - struct dap_stream_ch_table_t *l_ret;; + pthread_rwlock_wrlock(&s_ch_table_lock); + struct dap_stream_ch_table_t *l_ret; HASH_FIND_PTR(s_ch_table, &a_ch, l_ret); if (!l_ret) { - pthread_mutex_unlock(&s_ch_table_lock); + pthread_rwlock_unlock(&s_ch_table_lock); return; } HASH_DEL(s_ch_table, l_ret); pthread_mutex_lock(&a_ch->mutex); - pthread_mutex_unlock(&s_ch_table_lock); + pthread_rwlock_unlock(&s_ch_table_lock); DAP_DELETE(l_ret); if (a_ch->proc) if (a_ch->proc->delete_callback) a_ch->proc->delete_callback(a_ch, NULL); + a_ch->stream->channel[a_ch->stream->channel_count--] = NULL; pthread_mutex_unlock(&a_ch->mutex); pthread_mutex_destroy(&a_ch->mutex); - //pthread_rwlock_wrlock(&a_ch->stream->rwlock); - a_ch->stream->channel[a_ch->stream->channel_count--] = NULL; - //pthread_rwlock_unlock(&a_ch->stream->rwlock); - /* fixed raise, but probably may be memory leak! if(ch->internal){ free(ch->internal);