Changeset 62273d1 in mainline for uspace/srv/taskman/task.c
- Timestamp:
- 2019-08-07T04:27:24Z (5 years ago)
- Children:
- 2f44fafd
- Parents:
- 70d28e8
- git-author:
- Michal Koutný <xm.koutny+hos@…> (2015-10-08 21:46:22)
- git-committer:
- Matthieu Riolo <matthieu.riolo@…> (2019-08-07 04:27:24)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/taskman/task.c
r70d28e8 r62273d1 52 52 53 53 task_id_t id; /**< Task ID. */ 54 bool finished;/**< Task is done. */54 task_exit_t exit;/**< Task is done. */ 55 55 bool have_rval; /**< Task returned a value. */ 56 56 int retval; /**< The return value. */ … … 185 185 186 186 hashed_task_t *ht = hash_table_get_inst(link, hashed_task_t, link); 187 if ( !ht->finished)187 if (ht->exit == TASK_EXIT_RUNNING) 188 188 continue; 189 189 190 190 if (!(pr->callid & IPC_CALLID_NOTIFICATION)) { 191 texit = ht->have_rval ? TASK_EXIT_NORMAL : 192 TASK_EXIT_UNEXPECTED; 191 texit = ht->exit; 193 192 async_answer_2(pr->callid, EOK, texit, 194 193 ht->retval); … … 216 215 } 217 216 218 if (ht->finished) { 219 task_exit_t texit = ht->have_rval ? TASK_EXIT_NORMAL : 220 TASK_EXIT_UNEXPECTED; 217 if (ht->exit != TASK_EXIT_RUNNING) { 218 task_exit_t texit = ht->exit; 221 219 async_answer_2(callid, EOK, texit, ht->retval); 222 220 return; … … 242 240 } 243 241 244 int ns_task_id_intro(ipc_call_t *call)245 { 246 247 task_id_t id = MERGE_LOUP32(IPC_GET_ARG1(*call), IPC_GET_ARG2(*call));248 249 ht_link_t *link = hash_table_find(&phone_to_id, &call->in_phone_hash);242 int task_id_intro(ipc_call_t *call) 243 { 244 // TODO think about task_id reuse and this 245 // R lock 246 ht_link_t *link = hash_table_find(&task_hash_table, &call->in_task_id); 247 // R unlock 250 248 if (link != NULL) 251 249 return EEXISTS; 252 253 p2i_entry_t *entry = (p2i_entry_t *) malloc(sizeof(p2i_entry_t));254 if (entry == NULL)255 return ENOMEM;256 250 257 251 hashed_task_t *ht = (hashed_task_t *) malloc(sizeof(hashed_task_t)); 258 252 if (ht == NULL) 259 253 return ENOMEM; 260 261 /* 262 * Insert into the phone-to-id map. 263 */ 264 265 entry->in_phone_hash = call->in_phone_hash; 266 entry->id = id; 267 hash_table_insert(&phone_to_id, &entry->link); 268 254 269 255 /* 270 256 * Insert into the main table. 271 257 */ 272 273 ht->id = id; 274 ht->finished = false; 258 ht->id = call->in_task_id; 259 ht->exit = TASK_EXIT_RUNNING; 275 260 ht->have_rval = false; 276 261 ht->retval = -1; 262 // W lock 277 263 hash_table_insert(&task_hash_table, &ht->link); 278 279 return EOK; 280 } 281 282 static int get_id_by_phone(sysarg_t phone_hash, task_id_t *id) 283 { 284 ht_link_t *link = hash_table_find(&phone_to_id, &phone_hash); 285 if (link == NULL) 286 return ENOENT; 287 288 p2i_entry_t *entry = hash_table_get_inst(link, p2i_entry_t, link); 289 *id = entry->id; 264 // W unlock 290 265 291 266 return EOK; … … 302 277 hash_table_get_inst(link, hashed_task_t, link) : NULL; 303 278 304 if ((ht == NULL) || (ht-> finished))305 return E OK; // TODO EINVAL when registration works;306 307 ht->finished = true;279 if ((ht == NULL) || (ht->exit != TASK_EXIT_RUNNING)) 280 return EINVAL; 281 282 // TODO process additional flag to retval 308 283 ht->have_rval = true; 309 284 ht->retval = IPC_GET_ARG1(*call); … … 314 289 } 315 290 316 int ns_task_disconnect(ipc_call_t *call) 317 { 318 task_id_t id; 319 int rc = get_id_by_phone(call->in_phone_hash, &id); 320 if (rc != EOK) 321 return rc; 322 323 /* Delete from phone-to-id map. */ 324 hash_table_remove(&phone_to_id, &call->in_phone_hash); 325 291 void task_terminated(task_id_t id, task_exit_t texit) 292 { 326 293 /* Mark task as finished. */ 294 // R lock 327 295 ht_link_t *link = hash_table_find(&task_hash_table, &id); 296 // R unlock 328 297 if (link == NULL) 329 return EOK;298 return; 330 299 331 300 hashed_task_t *ht = hash_table_get_inst(link, hashed_task_t, link); 332 301 333 ht->finished = true; 334 302 ht->exit = texit; 335 303 process_pending_wait(); 336 hash_table_remove(&task_hash_table, &id); 337 338 return EOK; 304 305 // W lock 306 hash_table_remove_item(&task_hash_table, &ht->link); 307 // W unlock 339 308 } 340 309
Note:
See TracChangeset
for help on using the changeset viewer.