Changeset ea186c6 in mainline for uspace/srv/loc/loc.c
- Timestamp:
- 2011-08-18T20:27:26Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 921b84f
- Parents:
- 1f44b056 (diff), ef7052ec (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/loc/loc.c
r1f44b056 rea186c6 67 67 **/ 68 68 69 staticFIBRIL_MUTEX_INITIALIZE(services_list_mutex);69 FIBRIL_MUTEX_INITIALIZE(services_list_mutex); 70 70 static FIBRIL_CONDVAR_INITIALIZE(services_list_cv); 71 71 static FIBRIL_MUTEX_INITIALIZE(servers_list_mutex); … … 311 311 { 312 312 assert(fibril_mutex_is_locked(&services_list_mutex)); 313 313 assert(fibril_mutex_is_locked(&cdir.mutex)); 314 314 315 loc_namespace_delref(service->namespace); 315 316 list_remove(&(service->services)); 316 317 list_remove(&(service->server_services)); 318 319 /* Remove service from all categories. */ 320 while (!list_empty(&service->cat_memb)) { 321 link_t *link = list_first(&service->cat_memb); 322 svc_categ_t *memb = list_get_instance(link, svc_categ_t, 323 svc_link); 324 fibril_mutex_lock(&memb->cat->mutex); 325 category_remove_service(memb); 326 fibril_mutex_unlock(&memb->cat->mutex); 327 } 317 328 318 329 free(service->name); … … 415 426 fibril_mutex_lock(&services_list_mutex); 416 427 fibril_mutex_lock(&server->services_mutex); 428 fibril_mutex_lock(&cdir.mutex); 417 429 418 430 while (!list_empty(&server->services)) { … … 423 435 } 424 436 437 fibril_mutex_unlock(&cdir.mutex); 425 438 fibril_mutex_unlock(&server->services_mutex); 426 439 fibril_mutex_unlock(&services_list_mutex); … … 492 505 link_initialize(&service->services); 493 506 link_initialize(&service->server_services); 507 list_initialize(&service->cat_memb); 494 508 495 509 /* Check that service is not already registered */ … … 529 543 * 530 544 */ 531 static intloc_service_unregister(ipc_callid_t iid, ipc_call_t *icall,545 static void loc_service_unregister(ipc_callid_t iid, ipc_call_t *icall, 532 546 loc_server_t *server) 533 547 { 534 /* TODO */ 535 return EOK; 548 loc_service_t *svc; 549 550 fibril_mutex_lock(&services_list_mutex); 551 svc = loc_service_find_id(IPC_GET_ARG1(*icall)); 552 if (svc == NULL) { 553 fibril_mutex_unlock(&services_list_mutex); 554 async_answer_0(iid, ENOENT); 555 return; 556 } 557 558 fibril_mutex_lock(&cdir.mutex); 559 loc_service_unregister_core(svc); 560 fibril_mutex_unlock(&cdir.mutex); 561 fibril_mutex_unlock(&services_list_mutex); 562 async_answer_0(iid, EOK); 536 563 } 537 564 … … 1176 1203 1177 1204 fibril_mutex_lock(&services_list_mutex); 1205 fibril_mutex_lock(&cdir.mutex); 1178 1206 loc_service_unregister_core(null_services[i]); 1207 fibril_mutex_unlock(&cdir.mutex); 1179 1208 fibril_mutex_unlock(&services_list_mutex); 1180 1209 … … 1242 1271 1243 1272 cat = category_new("usbhc"); 1273 categ_dir_add_cat(&cdir, cat); 1274 1275 cat = category_new("virtual"); 1244 1276 categ_dir_add_cat(&cdir, cat); 1245 1277
Note:
See TracChangeset
for help on using the changeset viewer.