| | |
| | | void *tmp_ptr = hashtable_get(hashtable, key); |
| | | |
| | | if (tmp_ptr == NULL || tmp_ptr == (void *)1 ) { |
| | | queue = new LockFreeQueue<shm_packet_t>(32); |
| | | queue = new LockFreeQueue<shm_packet_t>(LOCK_FREE_Q_DEFAULT_SIZE); |
| | | hashtable_put(hashtable, key, (void *)queue); |
| | | return queue; |
| | | } else if(force) { |
| | |
| | | int s, type; |
| | | pthread_mutexattr_t mtxAttr; |
| | | |
| | | logger->debug("shm_socket_open\n"); |
| | | // shm_socket_t *socket = (shm_socket_t *)calloc(1, sizeof(shm_socket_t)); |
| | | shm_socket_t *sockt = new shm_socket_t; |
| | | sockt->socket_type = socket_type; |
| | |
| | | |
| | | if (rv != 0) { |
| | | if(rv == ETIMEDOUT){ |
| | | logger->debug("%d shm_recvandsend failed %s", shm_socket_get_key(sockt), bus_strerror(EBUS_TIMEOUT)); |
| | | logger->error("%d shm_recvandsend failed %s", shm_socket_get_key(sockt), bus_strerror(EBUS_TIMEOUT)); |
| | | return EBUS_TIMEOUT; |
| | | } |
| | | |
| | |
| | | |
| | | if (rv != 0) { |
| | | |
| | | logger->debug("%d shm_recvfrom failed %s", shm_socket_get_key(sockt), bus_strerror(rv)); |
| | | logger->error("%d shm_recvfrom failed %s", shm_socket_get_key(sockt), bus_strerror(rv)); |
| | | return rv; |
| | | |
| | | } |
| | |
| | | recvbufIter = sockt->recvbuf.find(uuid); |
| | | if(recvbufIter != sockt->recvbuf.end()) { |
| | | // 在缓存里查到了UUID匹配成功的 |
| | | logger->debug("get from recvbuf: %s", uuid.c_str()); |
| | | recvpak = recvbufIter->second; |
| | | sockt->recvbuf.erase(recvbufIter); |
| | | goto LABLE_SUC; |
| | |
| | | return EBUS_TIMEOUT; |
| | | } |
| | | |
| | | logger->debug("%d shm_recvfrom failed %s", shm_socket_get_key(sockt), bus_strerror(rv)); |
| | | logger->error("%d shm_recvfrom failed %s", shm_socket_get_key(sockt), bus_strerror(rv)); |
| | | return rv; |
| | | } |
| | | |
| | | logger->debug("send uuid:%s, recv uuid: %s", uuid.c_str(), recvpak.uuid); |
| | | if(strlen(recvpak.uuid) == 0) { |
| | | continue; |
| | | } else if (strncmp(uuid.c_str(), recvpak.uuid, sizeof(recvpak.uuid)) == 0) { |
| | |
| | | rv = shm_recvpakfrom(tmp_socket, &recvpak, timeout, flags); |
| | | |
| | | if (rv != 0) { |
| | | logger->debug("%d shm_recvfrom failed %s", shm_socket_get_key(tmp_socket), bus_strerror(rv)); |
| | | logger->error("%d shm_recvfrom failed %s", shm_socket_get_key(tmp_socket), bus_strerror(rv)); |
| | | return rv; |
| | | } |
| | | |