Rev 1196 | Rev 1248 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1196 | Rev 1210 | ||
---|---|---|---|
Line 451... | Line 451... | ||
451 | /** Process syscall to create new thread. |
451 | /** Process syscall to create new thread. |
452 | * |
452 | * |
453 | */ |
453 | */ |
454 | __native sys_thread_create(uspace_arg_t *uspace_uarg, char *uspace_name) |
454 | __native sys_thread_create(uspace_arg_t *uspace_uarg, char *uspace_name) |
455 | { |
455 | { |
456 | thread_t *t; |
456 | thread_t *t; |
457 | char namebuf[THREAD_NAME_BUFLEN]; |
457 | char namebuf[THREAD_NAME_BUFLEN]; |
458 | uspace_arg_t *kernel_uarg; |
458 | uspace_arg_t *kernel_uarg; |
459 | __u32 tid; |
459 | __u32 tid; |
460 | 460 | ||
461 | copy_from_uspace(namebuf, uspace_name, THREAD_NAME_BUFLEN); |
461 | copy_from_uspace(namebuf, uspace_name, THREAD_NAME_BUFLEN); |
462 | 462 | ||
463 | kernel_uarg = (uspace_arg_t *) malloc(sizeof(uspace_arg_t), 0); |
463 | kernel_uarg = (uspace_arg_t *) malloc(sizeof(uspace_arg_t), 0); |
464 | copy_from_uspace(kernel_uarg, uspace_uarg, sizeof(uspace_arg_t)); |
464 | copy_from_uspace(kernel_uarg, uspace_uarg, sizeof(uspace_arg_t)); |
465 | 465 | ||
466 | if ((t = thread_create(uinit, kernel_uarg, TASK, 0, namebuf))) { |
466 | if ((t = thread_create(uinit, kernel_uarg, TASK, 0, namebuf))) { |
467 | tid = t->tid; |
467 | tid = t->tid; |
468 | thread_ready(t); |
468 | thread_ready(t); |
469 | return (__native) tid; |
469 | return (__native) tid; |
470 | } else { |
470 | } else { |
471 | free(kernel_uarg); |
471 | free(kernel_uarg); |
472 | } |
472 | } |
473 | 473 | ||
474 | return (__native) -1; |
474 | return (__native) -1; |
475 | } |
475 | } |
476 | 476 | ||
477 | /** Process syscall to terminate thread. |
477 | /** Process syscall to terminate thread. |
478 | * |
478 | * |
479 | */ |
479 | */ |
480 | __native sys_thread_exit(int uspace_status) |
480 | __native sys_thread_exit(int uspace_status) |
481 | { |
481 | { |
482 | thread_exit(); |
482 | thread_exit(); |
483 | /* Unreachable */ |
483 | /* Unreachable */ |
484 | return 0; |
484 | return 0; |
485 | } |
485 | } |