/* * Class: com_sun_tools_jdi_SharedMemoryTransport * Method: startListening0 * Signature: (Ljava/lang/String;)J */ JNIEXPORT jlong JNICALL Java_com_sun_tools_jdi_SharedMemoryTransportService_startListening0 (JNIEnv *env, jobject thisObject, jstring address) { const char *addrChars = NULL; jint rc; jstring retAddress = NULL; SharedMemoryTransport *transport = NULL; if (address != NULL) { addrChars = (*env)->GetStringUTFChars(env, address, NULL); if ((*env)->ExceptionOccurred(env)) { return TRANSPORT_TO_ID(transport); } else if (addrChars == NULL) { throwException(env, "java/lang/InternalError", "GetStringUTFChars failed"); return TRANSPORT_TO_ID(transport); } } rc = shmemBase_listen(addrChars, &transport); if (rc != SYS_OK) { throwShmemException(env, "shmemBase_listen failed", rc); } if (addrChars != NULL) { (*env)->ReleaseStringUTFChars(env, address, addrChars); } return TRANSPORT_TO_ID(transport); }
static jdwpTransportError JNICALL shmemStartListening(jdwpTransportEnv* env, const char *address, char **actualAddress) { jint rc; if (connection != NULL || transport != NULL) { RETURN_ERROR(JDWPTRANSPORT_ERROR_ILLEGAL_STATE, "already connected or already listening"); } rc = shmemBase_listen(address, &transport); /* * If a name was selected by the function above, find it and return * it in place of the original arg. */ if (rc == SYS_OK) { char *name; char *name2; rc = shmemBase_name(transport, &name); if (rc == SYS_OK) { name2 = (callbacks->alloc)((int)strlen(name) + 1); if (name2 == NULL) { RETURN_ERROR(JDWPTRANSPORT_ERROR_OUT_OF_MEMORY, "out of memory"); } else { strcpy(name2, name); *actualAddress = name2; } } } else { RETURN_IO_ERROR("failed to create shared memory listener"); } return JDWPTRANSPORT_ERROR_NONE; }