void queueDestroy(QueueClass *queue) { eventSourceDestroy(&queue->writeEventSource); eventSourceDestroy(&queue->readEventSource); mutexDestroy(&queue->readMutex); mutexDestroy(&queue->writeMutex); free(queue->buffer); }
THREAD_ROUTINE_RETURN SocketServer::HandleConnections(void* data) { SocketServer* server = (SocketServer*) data; std::vector<SocketServer::Connection*> clients; struct sockaddr_storage client_addr; socklen_t addr_size = sizeof(client_addr); MutexHandle lock; mutexCreate(&lock); int client_socket; while (!server->shutdown_) { if ((client_socket = accept(server->socket_, (struct sockaddr*)&client_addr, &addr_size)) > 0) { clients.push_back(new jsonrpc::SocketServer::Connection()); clients.back()->socket = client_socket; clients.back()->pserver = server; clients.back()->plock_server = &lock; CloseFinishedConnections(clients); if (clients.size() > server->poolSize_) { CloseOldestConnection(clients); } threadCreate(&clients.back()->thread, (ThreadStartRoutine)ConnectionHandler, clients.back()); } } CloseAllConnections(clients); mutexDestroy(&lock); return 0; }
/* * Cleanup the data structure allocated as above. * For JDK 1.2, this function is not called ... */ void FinalizeIO() { int i; for (i = 0; i < fd_limit; i++) { mutexDestroy(&fd_table[i].lock); } sysFree(fd_table); fd_table = 0; }
EventLoop::~EventLoop() { stop(); while(m_status != STATUS_CLOSED) { sleep_ms(50); addAsynOperator(); } delAllOp(); delAllConnections(); sock_close(m_ctlfd); sock_close(m_ctlfd1); mutexDestroy(&m_opcs); if(m_clean) m_clean(this, m_obj); }
Logger::~Logger() { // close all open files for (unsigned int i = 0; i < numLogfiles; i++) { if (logfiles[i].file != NULL) { fclose(logfiles[i].file); } } #ifdef ENABLE_THREADS if (threaded) { mutexDestroy(&maccess); } #endif }