Changeset e5a1f82f in mainline for libc/generic


Ignore:
Timestamp:
2006-03-17T18:09:15Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
81e55099
Parents:
11a4fbf
Message:

Improved uspace threads (uspace).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libc/generic/thread.c

    r11a4fbf re5a1f82f  
    2929#include <thread.h>
    3030#include <libc.h>
     31#include <stdlib.h>
    3132#include <arch/faddr.h>
     33#include <kernel/proc/uarg.h>
    3234
    33 typedef void (* voidfunc_t)(void);
     35void thread_main(uspace_arg_t *uarg)
     36{
     37        uarg->uspace_thread_function(uarg->uspace_thread_arg);
     38        free(uarg->uspace_stack);
     39        free(uarg);
     40        thread_exit(0);
     41}
    3442
    35 int thread_create(void (* function)(void *), void *arg, void *stack, char *name)
     43int thread_create(void (* function)(void *), void *arg, char *name)
    3644{
    37         return __SYSCALL4(SYS_THREAD_CREATE, (sysarg_t) FADDR((voidfunc_t) function), (sysarg_t) arg, (sysarg_t) stack, (sysarg_t) name);
     45        char *stack;
     46        uspace_arg_t *uarg;
     47
     48        stack = (char *) malloc(getpagesize());
     49        if (!stack)
     50                return -1;
     51               
     52        uarg = (uspace_arg_t *) malloc(sizeof(uspace_arg_t));
     53        if (!uarg) {
     54                free(stack);
     55                return -1;
     56        }
     57        uarg->uspace_entry = (void *) FADDR(__thread_entry);
     58        uarg->uspace_stack = (void *) stack;
     59        uarg->uspace_thread_function = (void *) FADDR(function);
     60        uarg->uspace_thread_arg = arg;
     61        uarg->uspace_uarg = uarg;
     62       
     63        return __SYSCALL2(SYS_THREAD_CREATE, (sysarg_t) uarg, (sysarg_t) name);
    3864}
    3965
     
    4268        __SYSCALL1(SYS_THREAD_EXIT, (sysarg_t) status);
    4369}
    44 
Note: See TracChangeset for help on using the changeset viewer.