Changes in uspace/srv/net/tl/udp/udp.c [a8a13d0:aadf01e] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/tl/udp/udp.c
ra8a13d0 raadf01e 418 418 struct sockaddr * addr; 419 419 size_t addrlen; 420 fibril_rwlock_t lock; 420 421 ipc_call_t answer; 421 422 int answer_count; … … 432 433 433 434 socket_cores_initialize(&local_sockets); 435 fibril_rwlock_initialize(&lock); 434 436 435 437 while(keep_on_going){ … … 451 453 break; 452 454 case NET_SOCKET: 455 fibril_rwlock_write_lock(&lock); 453 456 *SOCKET_SET_SOCKET_ID(answer) = SOCKET_GET_SOCKET_ID(call); 454 457 res = socket_create(&local_sockets, app_phone, NULL, SOCKET_SET_SOCKET_ID(answer)); 458 fibril_rwlock_write_unlock(&lock); 455 459 if(res == EOK){ 456 460 if(tl_get_ip_packet_dimension(udp_globals.ip_phone, &udp_globals.dimensions, DEVICE_INVALID_ID, &packet_dimension) == EOK){ … … 465 469 res = data_receive((void **) &addr, &addrlen); 466 470 if(res == EOK){ 471 fibril_rwlock_read_lock(&lock); 467 472 fibril_rwlock_write_lock(&udp_globals.lock); 468 473 res = socket_bind(&local_sockets, &udp_globals.sockets, SOCKET_GET_SOCKET_ID(call), addr, addrlen, UDP_FREE_PORTS_START, UDP_FREE_PORTS_END, udp_globals.last_used_port); 469 474 fibril_rwlock_write_unlock(&udp_globals.lock); 475 fibril_rwlock_read_unlock(&lock); 470 476 free(addr); 471 477 } … … 474 480 res = data_receive((void **) &addr, &addrlen); 475 481 if(res == EOK){ 482 fibril_rwlock_read_lock(&lock); 476 483 fibril_rwlock_write_lock(&udp_globals.lock); 477 484 res = udp_sendto_message(&local_sockets, SOCKET_GET_SOCKET_ID(call), addr, addrlen, SOCKET_GET_DATA_FRAGMENTS(call), SOCKET_SET_DATA_FRAGMENT_SIZE(answer), SOCKET_GET_FLAGS(call)); … … 481 488 answer_count = 2; 482 489 } 490 fibril_rwlock_read_unlock(&lock); 483 491 free(addr); 484 492 } 485 493 break; 486 494 case NET_SOCKET_RECVFROM: 495 fibril_rwlock_read_lock(&lock); 487 496 fibril_rwlock_write_lock(&udp_globals.lock); 488 497 res = udp_recvfrom_message(&local_sockets, SOCKET_GET_SOCKET_ID(call), SOCKET_GET_FLAGS(call), &addrlen); 489 498 fibril_rwlock_write_unlock(&udp_globals.lock); 499 fibril_rwlock_read_unlock(&lock); 490 500 if(res > 0){ 491 501 *SOCKET_SET_READ_DATA_LENGTH(answer) = res; … … 496 506 break; 497 507 case NET_SOCKET_CLOSE: 508 fibril_rwlock_write_lock(&lock); 498 509 fibril_rwlock_write_lock(&udp_globals.lock); 499 510 res = socket_destroy(udp_globals.net_phone, SOCKET_GET_SOCKET_ID(call), &local_sockets, &udp_globals.sockets, NULL); 500 511 fibril_rwlock_write_unlock(&udp_globals.lock); 512 fibril_rwlock_write_unlock(&lock); 501 513 break; 502 514 case NET_SOCKET_GETSOCKOPT: … … 507 519 } 508 520 } 509 510 // release the application phone511 ipc_hangup(app_phone);512 521 513 522 // release all local sockets
Note:
See TracChangeset
for help on using the changeset viewer.