void VMSocket::writableSlot(int socket) { writeNotifier->setEnabled(false); /* Make an up-call to unblock the thread */ NotifySocketStatusChanged((long)this, SD_SEND); (void)socket; // avoid a compiler warning }
/** * See pcsl_network_na.h for definition. */ void na_destroy(void *handle) { if (handle != NULL) { SocketHandle *sh = SOCKET_HANDLE(handle); removeSocketHandle(SOCKET_HANDLE(handle)); /* Still registered readers/writers should be unblocked */ if (sh->check_flags != 0) { sh->status = PCSL_NET_INTERRUPTED; if (sh->check_flags & CHECK_READ) { NotifySocketStatusChanged((long)handle, SD_RECV); } if (sh->check_flags & CHECK_WRITE) { NotifySocketStatusChanged((long)handle, SD_SEND); } } /* It's up to caller to guarantee this handle will be used no more */ pcsl_mem_free(handle); } }
/** * See pcsl_network_na.h for definition. */ void na_destroy(void *handle) { /* * Throw an interrupted IO Exception if this socket is already blocked * for read or write operation by any other thread */ if (((VMSocket*)handle)->readerCount > 0) { setVMSocketHandleStatus(handle, SOCKET_STATUS_INTERRUPTED); /* Make an up-call to unblock the thread */ NotifySocketStatusChanged((long)handle, SD_RECV); } if (((VMSocket*)handle)->writerCount > 0) { setVMSocketHandleStatus(handle, SOCKET_STATUS_INTERRUPTED); /* Make an up-call to unblock the thread */ NotifySocketStatusChanged((long)handle, SD_SEND); } destroySocketHandle(handle); }