| | |
| | | |
| | | |
| | | |
| | | static int _shm_close_dgram_socket(shm_socket_t *socket); |
| | | |
| | | |
| | | static void _destrory_socket_perthread(void *tmp_socket); |
| | |
| | | LockFreeQueue<shm_msg_t> *queue; |
| | | hashtable_lock(hashtable); |
| | | void *tmp_ptr = hashtable_get(hashtable, key); |
| | | if (tmp_ptr == NULL || tmp_ptr == (void *)1 || force ) { |
| | | |
| | | |
| | | if (tmp_ptr == NULL || tmp_ptr == (void *)1 ) { |
| | | queue = new LockFreeQueue<shm_msg_t>(16); |
| | | hashtable_put(hashtable, key, (void *)queue); |
| | | hashtable_unlock(hashtable); |
| | | return queue; |
| | | } else if(force) { |
| | | hashtable_unlock(hashtable); |
| | | return (LockFreeQueue<shm_msg_t> *) queue; |
| | | } |
| | | |
| | | hashtable_unlock(hashtable); |
| | |
| | | socket->socket_type = socket_type; |
| | | socket->key = 0; |
| | | socket->force_bind = false; |
| | | // socket->dispatch_thread = 0; |
| | | socket->queue = NULL; |
| | | |
| | | |
| | | s = pthread_mutexattr_init(&mtxAttr); |
| | |
| | | int s; |
| | | |
| | | logger->debug("shm_close_socket\n"); |
| | | _shm_close_dgram_socket(socket); |
| | | if(socket->queue != NULL) { |
| | | delete socket->queue; |
| | | socket->queue = NULL; |
| | | } |
| | | |
| | | s = pthread_mutex_destroy(&(socket->mutex) ); |
| | | if(s != 0) { |
| | |
| | | } |
| | | sockt->queue = shm_socket_bind_queue( sockt->key, sockt->force_bind); |
| | | if(sockt->queue == NULL ) { |
| | | logger->error("%s. key = %d", bus_strerror(EBUS_KEY_INUSED), sockt->key); |
| | | return EBUS_KEY_INUSED; |
| | | } |
| | | } |
| | |
| | | return 0; |
| | | } else { |
| | | mm_free(dest.buf); |
| | | logger->debug("====%d sendto key %d failed %s", shm_socket_get_key(sockt), key, bus_strerror(rv)); |
| | | return rv; |
| | | if(rv == ETIMEDOUT) |
| | | return EBUS_TIMEOUT; |
| | | else { |
| | | logger->debug("====%d sendto key %d failed %s", shm_socket_get_key(sockt), key, bus_strerror(rv)); |
| | | return rv; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | sokt->queue = shm_socket_bind_queue( sokt->key, sokt->force_bind); |
| | | if(sokt->queue == NULL ) { |
| | | logger->error("%s. key = %d", bus_strerror(EBUS_KEY_INUSED), sokt->key); |
| | | return EBUS_KEY_INUSED; |
| | | } |
| | | } |
| | |
| | | mm_free(src.buf); |
| | | return 0; |
| | | } else { |
| | | logger->debug("shm_recvfrom failed %s", bus_strerror(rv)); |
| | | return rv; |
| | | if(rv == ETIMEDOUT) |
| | | return EBUS_TIMEOUT; |
| | | else { |
| | | logger->debug("%d shm_recvfrom failed %s", shm_socket_get_key(sockt), bus_strerror(rv)); |
| | | return rv; |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | |
| | | // ============================================================================================================ |
| | | |
| | | |
| | | |
| | | int _shm_close_dgram_socket(shm_socket_t *socket){ |
| | | if(socket->queue != NULL) { |
| | | delete socket->queue; |
| | | socket->queue = NULL; |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | |
| | | |