static void closeTransport(SharedMemoryTransport *transport) { sysIPMutexClose(transport->mutex); sysEventClose(transport->acceptEvent); sysEventClose(transport->attachEvent); sysSharedMemClose(transport->sharedMemory, transport->shared); freeTransport(transport); }
static jint closeStream(Stream *stream) { /* * Lock stream during close - ignore shutdown event as we are * closing down and shutdown should be signalled. */ CHECK_ERROR(enterMutex(stream, NULL)); /* mark the stream as closed */ stream->state = STATE_CLOSED; /* wake up waitForData() if it is in sysEventWait() */ sysEventSignal(stream->hasData); sysEventClose(stream->hasData); /* wake up waitForSpace() if it is in sysEventWait() */ sysEventSignal(stream->hasSpace); sysEventClose(stream->hasSpace); CHECK_ERROR(leaveMutex(stream)); sysIPMutexClose(stream->mutex); return SYS_OK; }
static jint closeStream(Stream *stream, jboolean linger) { /* * Lock stream during close - ignore shutdown event as we are * closing down and shutdown should be signalled. */ CHECK_ERROR(enterMutex(stream, NULL)); /* mark the stream as closed */ stream->state = STATE_CLOSED; /* wake up waitForData() if it is in sysEventWait() */ sysEventSignal(stream->hasData); sysEventClose(stream->hasData); /* wake up waitForSpace() if it is in sysEventWait() */ sysEventSignal(stream->hasSpace); sysEventClose(stream->hasSpace); /* * If linger requested then give the stream a few seconds to * drain before closing it. */ if (linger) { int attempts = 10; while (!EMPTY(stream) && attempts>0) { CHECK_ERROR(leaveMutex(stream)); sysSleep(200); CHECK_ERROR(enterMutex(stream, NULL)); attempts--; } } CHECK_ERROR(leaveMutex(stream)); sysIPMutexClose(stream->mutex); return SYS_OK; }