int main(int argc, char **argv) { ddekit_init(); bsd_dde_init(); printf("cold=%d\n", cold); mtx_init(&mtx1, "test mutex", "test", MTX_DEF); cv_init(&cv1, "test condvar"); printf("----------------------------------------\n"); printf("wait for timeout\n"); l4thread_create(cond, (void*) 1, L4THREAD_CREATE_ASYNC); l4thread_sleep(200); printf("----------------------------------------\n"); printf("calling signal too early\n"); cv_signal(&cv1); l4thread_create(cond, (void*) 2, L4THREAD_CREATE_ASYNC); l4thread_sleep(200); printf("----------------------------------------\n"); printf("calling broadcast too early\n"); cv_broadcast(&cv1); l4thread_create(cond, (void*) 3, L4THREAD_CREATE_ASYNC); l4thread_sleep(200); printf("----------------------------------------\n"); printf("waking up one of two threads by signal\n"); l4thread_create(cond, (void*) 4, L4THREAD_CREATE_ASYNC); l4thread_create(cond, (void*) 5, L4THREAD_CREATE_ASYNC); l4thread_sleep(30); cv_signal(&cv1); l4thread_sleep(200); printf("----------------------------------------\n"); printf("waking up two threads by signal\n"); l4thread_create(cond, (void*) 6, L4THREAD_CREATE_ASYNC); l4thread_create(cond, (void*) 7, L4THREAD_CREATE_ASYNC); l4thread_sleep(30); cv_signal(&cv1); l4thread_sleep(30); cv_signal(&cv1); l4thread_sleep(200); printf("----------------------------------------\n"); printf("waking up two threads by broadcast\n"); l4thread_create(cond, (void*) 8, L4THREAD_CREATE_ASYNC); l4thread_create(cond, (void*) 9, L4THREAD_CREATE_ASYNC); l4thread_sleep(30); cv_broadcast(&cv1); l4thread_sleep(200); printf("----------------------------------------\n"); l4thread_sleep_forever(); return 0; }
int main(int argc, char **argv) { ddekit_init(); bsd_dde_init(); printf("- uninitialized, mtx_initialized= %d\n", mtx_initialized(&m)); mtx_init(&m, "test mutex", "test", MTX_DEF|MTX_RECURSE); printf("- initialized, mtx_initialized= %d\n", mtx_initialized(&m)); printf(" mtx_name =\"%s\"\n", mtx_name(&m)); printf(" mtx_owned = %d\n", mtx_owned(&m)); printf(" mtx_recursed = %d\n", mtx_recursed(&m)); l4thread_create(mdwn, (void*) 1, L4THREAD_CREATE_ASYNC); l4thread_sleep(200); mtx_lock(&m); printf("- locked mtx_owned = %d\n", mtx_owned(&m)); printf(" mtx_recursed = %d\n", mtx_recursed(&m)); l4thread_create(mdwn, (void*) 2, L4THREAD_CREATE_ASYNC); l4thread_sleep(200); mtx_lock(&m); printf("- locked x2 mtx_owned = %d\n", mtx_owned(&m)); printf(" mtx_recursed = %d\n", mtx_recursed(&m)); l4thread_create(mdwn, (void*) 3, L4THREAD_CREATE_ASYNC); l4thread_sleep(200); mtx_lock(&m); printf("- locked x3 mtx_owned = %d\n", mtx_owned(&m)); printf(" mtx_recursed = %d\n", mtx_recursed(&m)); l4thread_create(mdwn, (void*) 4, L4THREAD_CREATE_ASYNC); l4thread_sleep(200); mtx_unlock(&m); printf("- unlocked x1 mtx_owned = %d\n", mtx_owned(&m)); printf(" mtx_recursed = %d\n", mtx_recursed(&m)); l4thread_create(mdwn, (void*) 5, L4THREAD_CREATE_ASYNC); l4thread_sleep(200); mtx_unlock(&m); printf("- unlocked x2 mtx_owned = %d\n", mtx_owned(&m)); printf(" mtx_recursed = %d\n", mtx_recursed(&m)); l4thread_create(mdwn, (void*) 6, L4THREAD_CREATE_ASYNC); l4thread_sleep(200); mtx_unlock(&m); printf("- unlocked x3 mtx_owned = %d\n", mtx_owned(&m)); printf(" mtx_recursed = %d\n", mtx_recursed(&m)); l4thread_create(mdwn, (void*) 7, L4THREAD_CREATE_ASYNC); l4thread_sleep(200); mtx_destroy(&m); printf("- destroyed, mtx_initialized= %d\n", mtx_initialized(&m)); l4thread_sleep_forever(); return 0; }
void main (int argc, char *argv[]) { CORBA_Server_Environment env = dice_default_server_environment; l4dm_dataspace_t ds; l4_threadid_t pager; l4_addr_t addr; l4_size_t size; int rc, t; int is_int = 0; int value_int = 0; char buf[0x1000]; char *p = buf; int optionid; int opt = 0; const struct option long_options[] = { { "events", no_argument, NULL, 'e'}, { 0, 0, 0, 0} }; //init_globals(); if (!names_register("os2exec")) { LOG("Error registering on the name server!"); return; } if (!names_waitfor_name("os2srv", &os2srv, 30000)) { LOG("os2srv not found on name server!"); return; } if (!names_waitfor_name("os2fs", &fs, 30000)) { LOG("os2fs not found on name server!"); return; } LOG("os2fs tid:%x.%x", fs.id.task, fs.id.lthread); if (!names_waitfor_name("LOADER", &loader, 30000)) { LOG("LOADER not found on name server!"); return; } execsrv = l4_myself(); // Parse command line arguments for (;;) { opt = getopt_long(argc, argv, "e", long_options, &optionid); if (opt == -1) break; switch (opt) { case 'e': LOG("using events server"); use_events = 1; break; default: LOG("Error: Unknown option %c", opt); usage(); return; } } // start events thread if (use_events) { // start events thread l4thread_create(event_thread, 0, L4THREAD_CREATE_ASYNC); LOG("event thread started"); } /* reserve the area below 64 Mb for application private code (not for use by libraries, loaded by execsrv) */ addr = 0x2f000; size = 0x04000000 - addr; if ((rc = l4rm_direct_area_setup_region(addr, size, L4RM_DEFAULT_REGION_AREA, L4RM_REGION_BLOCKED, 0, L4_INVALID_ID)) < 0) { LOG_printf("main(): setup region %x-%x failed (%d)!\n", addr, addr + size, rc); l4rm_show_region_list(); enter_kdebug("PANIC"); } memset (&options, 0, sizeof(options)); #if 0 if (!CfgGetopt("debugmodmgr", &is_int, &value_int, (char **)&p)) if (is_int) options.debugmodmgr = value_int; if (!CfgGetopt("debugixfmgr", &is_int, &value_int, (char **)&p)) if (is_int) options.debugixfmgr = value_int; if (!CfgGetopt("libpath", &is_int, &value_int, (char **)&p)) if (!is_int) { options.libpath = (char *)malloc(strlen(p) + 1); strcpy(options.libpath, p); } LOG("debugmodmgr=%d", options.debugmodmgr); LOG("debugixfmgr=%d", options.debugixfmgr); LOG("libpath=%s", options.libpath); #endif options.libpath = (char *)malloc(4); strcpy(options.libpath, "c:\\"); /* get our l4env infopage as a dataspace */ rc = l4loader_app_info_call(&loader, l4_myself().id.task, 0, &p, &ds, &env); /* attach it */ attach_ds(&ds, L4DM_RO, &infopage); #if 0 /* load shared libs */ rc = loadso(); if (rc) { LOG("Error loading shared libraries"); return; } #endif init_memmgr(&root_area); /* load IXF's */ rc = load_ixfs(); if (rc) { LOG("Error loading IXF driver"); return; } /* Initializes the module list. Keeps info about which dlls an process have loaded and has linked to it (Only support for LX dlls so far). The head of the linked list is declared as a global inside dynlink.c */ rc = ModInitialize(); if (rc) { LOG("Can't initialize module manager"); return; } // server loop LOG("execsrv started."); env.malloc = (dice_malloc_func)malloc; env.free = (dice_free_func)free; os2exec_server_loop(&env); }
int main (int argc, char *argv[]) { //CORBA_Environment env = dice_default_environment; l4_uint32_t area; int rc = 0; int optionid; int opt = 0; const struct option long_options[] = { { "events", no_argument, NULL, 'e'}, { 0, 0, 0, 0} }; if (!names_waitfor_name("os2srv", &os2srv, 30000)) { LOG("Can't find os2srv on names, exiting..."); __exit(1, 1); } if (!names_waitfor_name(fprov, &fprov_id, 30000)) { LOG("Can't find %s on names, exiting...", fprov); __exit(1, 1); } // reserve the lower 64 Mb for OS/2 app rc = l4rm_area_reserve_region(0x10000, 0x04000000 - 0x10000, 0, &area); if (rc < 0) { LOG("Panic: something is using memory within the 1st 64 Mb!"); __exit(1, 1); } /* query default dataspace manager id */ dsm = l4env_get_default_dsm(); if (l4_is_invalid_id(dsm)) { LOG("No dataspace manager found\n"); __exit(1, 1); } LOG("dsm=%u.%u", dsm.id.task, dsm.id.lthread); LOG("frov_id=%u.%u", fprov_id.id.task, fprov_id.id.lthread); l4env_infopage = &infopg; l4env_infopage->fprov_id = fprov_id; l4env_infopage->memserv_id = dsm; if ((rc = DlOpen("/file/system/libkal.s.so", &kalHandle))) { LOG("Can't load libkal.s.so"); __exit(1, 1); } LOG("kalHandle=%lu", kalHandle); // fill in the parameter structure for KalInit initstr.stack = __stack; initstr.l4rm_do_attach = l4rm_do_attach; initstr.l4rm_detach = l4rm_detach; initstr.l4rm_lookup = l4rm_lookup; initstr.l4rm_lookup_region = l4rm_lookup_region; initstr.l4rm_do_reserve = l4rm_do_reserve; initstr.l4rm_set_userptr = l4rm_set_userptr; initstr.l4rm_get_userptr = l4rm_get_userptr; initstr.l4rm_area_release = l4rm_area_release; initstr.l4rm_area_release_addr = l4rm_area_release_addr; initstr.l4rm_show_region_list = l4rm_show_region_list; initstr.l4env_get_default_dsm = l4env_get_default_dsm; initstr.fiasco_gdt_set = __fiasco_gdt_set; initstr.fiasco_gdt_get_entry_offset = __fiasco_gdt_get_entry_offset; initstr.logtag = LOG_tag; // init kal.dll DlRoute(0, "KalInit", &initstr); // Parse command line arguments for (;;) { opt = getopt_long(argc, argv, "e", long_options, &optionid); if (opt == -1) break; switch (opt) { case 'e': LOG("using events server"); use_events = 1; break; default: LOG("Error: Unknown option %c", opt); usage(); __exit(1, 2); } } // start events thread if (use_events) { // start events thread l4thread_create((void *)event_thread, 0, L4THREAD_CREATE_ASYNC); LOG("event thread started"); } // release the reserved area for application rc = l4rm_area_release(area); LOG("calling KalStartApp..."); DlRoute(0, "KalStartApp", argv[argc - 1]); return 0; }
int main(int argc, char **argv) { CORBA_Environment env = dice_default_environment; int optionid; int opt = 0; const struct option long_options[] = { { "events", no_argument, NULL, 'e'}, { 0, 0, 0, 0} }; //int rc; init_globals(); //FSR_INIT(); if (!names_register("os2fs")) { LOG("Can't register on the name server!"); return 1; } LOG("registered at the name server"); if (!names_waitfor_name("os2srv", &os2srv, 30000)) { LOG("Can't find os2srv on names, exiting..."); return 1; } LOG("got os2srv tid from the name server"); LOG("argc=%d", argc); // Parse command line arguments for (;;) { opt = getopt_long(argc, argv, "e", long_options, &optionid); LOG("opt=%d", opt); if (opt == -1) break; switch (opt) { case 'e': LOG("using events server"); use_events = 1; break; default: LOG("Error: Unknown option %c", opt); usage(); break; } } // start events thread if (use_events) { // start events thread l4thread_create((void *)event_thread, 0, L4THREAD_CREATE_ASYNC); LOG("event thread started"); } // my id fs = l4_myself(); // server loop LOG("going to the server loop"); env.malloc = (dice_malloc_func)malloc; env.free = (dice_free_func)free; os2fs_server_loop(&env); return 0; }