int thread_1(void* args) { DkThreadDelayExecution(1000); pal_printf("In Thread 1\n"); while (count < 100) count++; DkEventSet(event1); DkThreadExit(); return 0; }
int shim_do_nanosleep (const struct __kernel_timespec * rqtp, struct __kernel_timespec * rmtp) { if (!rqtp) return -EFAULT; unsigned long time = rqtp->tv_sec * 1000000L + rqtp->tv_nsec / 1000; unsigned long ret = DkThreadDelayExecution(time); if (ret < time) { if (rmtp) { unsigned long remtime = time - ret; rmtp->tv_sec = remtime / 1000000L; rmtp->tv_nsec = (remtime - rmtp->tv_sec * 1000) * 1000; } return -EINTR; } return 0; }
int main(int argc, char ** argv) { char * name = "parent"; if (argc == 1) { const char * args[3]; char uri[20], uri2[20]; snprintf(uri2, 20, "file:%s", argv[0]); args[0] = "Ipc"; args[1] = uri; args[2] = NULL; void * mem = (void *) DkVirtualMemoryAlloc(NULL, pal_control.alloc_align, 0, PAL_PROT_READ|PAL_PROT_WRITE); pal_printf("mem = %p\n", mem); snprintf((char *) mem, 4096, "Hello World"); PAL_NUM key = 0; PAL_HANDLE chdl = DkCreatePhysicalMemoryChannel(&key); if (chdl == NULL) { pal_printf ("(parent) DkCreatePhysicalMemoryChannel Failed," " Make sure gipc module is loaded\n"); return 0; } snprintf(uri, 20, "gipc:%lld", key); PAL_HANDLE phdl = DkProcessCreate(uri2, 0, args); if (phdl == NULL) pal_printf ("ProcessCreate Failed\n"); PAL_PTR addr = (PAL_PTR) mem; PAL_NUM size = pal_control.alloc_align; DkPhysicalMemoryCommit(chdl, 1, &addr, &size, 0); DkObjectClose(chdl); char x; int rv = DkStreamRead(phdl, 0, 1, &x, NULL, 0); if (rv != 1) { pal_printf("Failed to get exit signal from child, %d\n", rv); return -1; } } else { name = argv[1]; PAL_HANDLE chdl = DkStreamOpen(name, 0, 0, 0, 0); if (chdl == NULL) { pal_printf("(child) StreamOpen Failed\n"); return 0; } PAL_PTR addr = NULL; PAL_NUM size = pal_control.alloc_align; PAL_FLG prot = PAL_PROT_READ|PAL_PROT_WRITE; int len = DkPhysicalMemoryMap (chdl, 1, &addr, &size, &prot); if (!len) { pal_printf("PhysicalMemoryMap Failed\n"); return 0; } pal_printf("(child) mem = %p\n", addr); pal_printf("(child) receive string: %s\n", (char *) addr); DkStreamDelete(chdl, 0); DkObjectClose(chdl); // Write a byte to the parent int rv = DkStreamWrite(pal_control.parent_process, 0, 1, "z", NULL); if (rv < 0) { pal_printf("Failed to write an exit byte\n"); return -1; } } pal_printf("Enter Main Thread (%s)\n", name); DkThreadDelayExecution (3000); pal_printf("Leave Main Thread\n"); return 0; }
int shim_do_pause (void) { /* ~0ULL micro sec ~= 805675 years */ DkThreadDelayExecution(~((PAL_NUM)0)); return -EINTR; }