Changes in uspace/lib/c/generic/fibril.c [c1b979a:32d19f7] in mainline
- File:
-
- 1 edited
-
uspace/lib/c/generic/fibril.c (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/fibril.c
rc1b979a r32d19f7 37 37 #include <fibril.h> 38 38 #include <thread.h> 39 #include <stack.h>40 39 #include <tls.h> 41 40 #include <malloc.h> 42 #include <abi/mm/as.h>43 #include <as.h>44 41 #include <unistd.h> 45 42 #include <stdio.h> … … 50 47 #include <async.h> 51 48 49 #ifndef FIBRIL_INITIAL_STACK_PAGES_NO 50 #define FIBRIL_INITIAL_STACK_PAGES_NO 1 51 #endif 52 52 53 /** 53 54 * This futex serializes access to ready_list, … … 59 60 static LIST_INITIALIZE(serialized_list); 60 61 static LIST_INITIALIZE(manager_list); 61 static LIST_INITIALIZE(fibril_list);62 62 63 63 /** Number of threads that are executing a manager fibril. */ … … 96 96 fibril_t *fibril_setup(void) 97 97 { 98 tcb_t *tcb = tls_make();98 tcb_t *tcb = __make_tls(); 99 99 if (!tcb) 100 100 return NULL; … … 102 102 fibril_t *fibril = malloc(sizeof(fibril_t)); 103 103 if (!fibril) { 104 tls_free(tcb);104 __free_tls(tcb); 105 105 return NULL; 106 106 } … … 117 117 118 118 fibril->waits_for = NULL; 119 list_append(&fibril->all_link, &fibril_list);120 119 121 120 return fibril; … … 124 123 void fibril_teardown(fibril_t *fibril) 125 124 { 126 list_remove(&fibril->all_link); 127 tls_free(fibril->tcb); 125 __free_tls(fibril->tcb); 128 126 free(fibril); 129 127 } … … 197 195 * stack member filled. 198 196 */ 199 as_area_destroy(stack);197 free(stack); 200 198 } 201 199 fibril_teardown(srcf->clean_after_me); … … 259 257 * @param func Implementing function of the new fibril. 260 258 * @param arg Argument to pass to func. 261 * @param stksz Stack size in bytes.262 259 * 263 260 * @return 0 on failure or TLS of the new fibril. 264 261 * 265 262 */ 266 fid_t fibril_create _generic(int (*func)(void *), void *arg, size_t stksz)263 fid_t fibril_create(int (*func)(void *), void *arg) 267 264 { 268 265 fibril_t *fibril; … … 272 269 return 0; 273 270 274 size_t stack_size = (stksz == FIBRIL_DFLT_STK_SIZE) ? 275 stack_size_get() : stksz; 276 fibril->stack = as_area_create((void *) -1, stack_size, 277 AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE | AS_AREA_GUARD | 278 AS_AREA_LATE_RESERVE); 279 if (fibril->stack == (void *) -1) { 271 fibril->stack = 272 (char *) malloc(FIBRIL_INITIAL_STACK_PAGES_NO * getpagesize()); 273 if (!fibril->stack) { 280 274 fibril_teardown(fibril); 281 275 return 0; … … 287 281 context_save(&fibril->ctx); 288 282 context_set(&fibril->ctx, FADDR(fibril_main), fibril->stack, 289 stack_size, fibril->tcb);283 FIBRIL_INITIAL_STACK_PAGES_NO * getpagesize(), fibril->tcb); 290 284 291 285 return (fid_t) fibril; … … 304 298 fibril_t *fibril = (fibril_t *) fid; 305 299 306 as_area_destroy(fibril->stack);300 free(fibril->stack); 307 301 fibril_teardown(fibril); 308 302 }
Note:
See TracChangeset
for help on using the changeset viewer.
