Changeset a35b458 in mainline for uspace/lib/c/generic/thread.c
- Timestamp:
- 2018-03-02T20:10:49Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f1380b7
- Parents:
- 3061bc1
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-02-28 17:38:31)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-03-02 20:10:49)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/thread.c
r3061bc1 ra35b458 65 65 if (fibril == NULL) 66 66 thread_exit(0); 67 67 68 68 __tcb_set(fibril->tcb); 69 69 70 70 #ifdef FUTEX_UPGRADABLE 71 71 rcu_register_fibril(); 72 72 futex_upgrade_all_and_wait(); 73 73 #endif 74 74 75 75 uarg->uspace_thread_function(uarg->uspace_thread_arg); 76 76 /* … … 80 80 * free(uarg); 81 81 */ 82 82 83 83 /* If there is a manager, destroy it */ 84 84 async_destroy_manager(); … … 87 87 rcu_deregister_fibril(); 88 88 #endif 89 89 90 90 fibril_teardown(fibril, false); 91 91 92 92 thread_exit(0); 93 93 } … … 112 112 if (!uarg) 113 113 return ENOMEM; 114 114 115 115 size_t stack_size = stack_size_get(); 116 116 void *stack = as_area_create(AS_AREA_ANY, stack_size, … … 121 121 return ENOMEM; 122 122 } 123 123 124 124 /* Make heap thread safe. */ 125 125 malloc_enable_multithreaded(); 126 126 127 127 uarg->uspace_entry = (void *) FADDR(__thread_entry); 128 128 uarg->uspace_stack = stack; … … 131 131 uarg->uspace_thread_arg = arg; 132 132 uarg->uspace_uarg = uarg; 133 133 134 134 errno_t rc = (errno_t) __SYSCALL4(SYS_THREAD_CREATE, (sysarg_t) uarg, 135 135 (sysarg_t) name, (sysarg_t) str_size(name), (sysarg_t) tid); 136 136 137 137 if (rc != EOK) { 138 138 /* … … 143 143 free(uarg); 144 144 } 145 145 146 146 return rc; 147 147 } … … 155 155 { 156 156 __SYSCALL1(SYS_THREAD_EXIT, (sysarg_t) status); 157 157 158 158 /* Unreachable */ 159 159 while (1); … … 214 214 * full argument range 215 215 */ 216 216 217 217 while (sec > 0) { 218 218 unsigned int period = (sec > 1000) ? 1000 : sec; 219 219 220 220 thread_usleep(period * 1000000); 221 221 sec -= period; 222 222 } 223 223 224 224 return 0; 225 225 }
Note:
See TracChangeset
for help on using the changeset viewer.