/* * Server creates stream. */ static int createStream(char *name, Stream *stream) { jint error; char prefix[MAX_IPC_PREFIX]; sprintf(prefix, "%s.mutex", name); error = createWithGeneratedName(prefix, stream->shared->mutexName, createMutex, &stream->mutex); if (error != SYS_OK) { return error; } sprintf(prefix, "%s.hasData", name); error = createWithGeneratedName(prefix, stream->shared->hasDataEventName, createEvent, &stream->hasData); if (error != SYS_OK) { (void)closeStream(stream, JNI_FALSE); return error; } sprintf(prefix, "%s.hasSpace", name); error = createWithGeneratedName(prefix, stream->shared->hasSpaceEventName, createEvent, &stream->hasSpace); if (error != SYS_OK) { (void)closeStream(stream, JNI_FALSE); return error; } stream->shared->readOffset = 0; stream->shared->writeOffset = 0; stream->shared->isFull = JNI_FALSE; stream->state = STATE_OPEN; return SYS_OK; }
static jint createTransport(const char *address, SharedMemoryTransport **transportPtr) { SharedMemoryTransport *transport; jint error; char prefix[MAX_IPC_PREFIX]; transport = allocTransport(); if (transport == NULL) { return SYS_NOMEM; } memset(transport, 0, sizeof(*transport)); if ((address == NULL) || (address[0] == '\0')) { SharedMemoryArg arg; arg.size = sizeof(SharedListener); error = createWithGeneratedName("javadebug", transport->name, createSharedMem, &arg); transport->shared = arg.start; transport->sharedMemory = arg.memory; } else { if (strlen(address) >= MAX_IPC_PREFIX) { fprintf(stderr,"Error: address strings longer than %d characters are invalid\n", MAX_IPC_PREFIX); closeTransport(transport); return SYS_ERR; } strcpy(transport->name, address); error = sysSharedMemCreate(address, sizeof(SharedListener), &transport->sharedMemory, &transport->shared); } if (error != SYS_OK) { fprintf(stderr,"Error creating shared memory, rc = %d\n", error); closeTransport(transport); return error; } memset(transport->shared, 0, sizeof(SharedListener)); transport->shared->acceptingPID = sysProcessGetID(); sprintf(prefix, "%s.mutex", transport->name); error = createWithGeneratedName(prefix, transport->shared->mutexName, createMutex, &transport->mutex); if (error != SYS_OK) { fprintf(stderr,"Error creating mutex, rc = %d\n", error); closeTransport(transport); return error; } sprintf(prefix, "%s.accept", transport->name); error = createWithGeneratedName(prefix, transport->shared->acceptEventName, createEvent, &transport->acceptEvent); if (error != SYS_OK) { fprintf(stderr,"Error creating event, rc = %d\n", error); closeTransport(transport); return error; } sprintf(prefix, "%s.attach", transport->name); error = createWithGeneratedName(prefix, transport->shared->attachEventName, createEvent, &transport->attachEvent); if (error != SYS_OK) { fprintf(stderr,"Error creating event, rc = %d\n", error); closeTransport(transport); return error; } *transportPtr = transport; return SYS_OK; }