Changeset 936835e in mainline for uspace/srv/net/tl/udp/udp.c
- Timestamp:
- 2010-03-07T15:35:32Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 836dd794
- Parents:
- aadf01e (diff), b5cbff4 (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/net/tl/udp/udp.c
raadf01e r936835e 418 418 struct sockaddr * addr; 419 419 size_t addrlen; 420 fibril_rwlock_t lock;421 420 ipc_call_t answer; 422 421 int answer_count; … … 433 432 434 433 socket_cores_initialize(&local_sockets); 435 fibril_rwlock_initialize(&lock);436 434 437 435 while(keep_on_going){ … … 453 451 break; 454 452 case NET_SOCKET: 455 fibril_rwlock_write_lock(&lock);456 453 *SOCKET_SET_SOCKET_ID(answer) = SOCKET_GET_SOCKET_ID(call); 457 454 res = socket_create(&local_sockets, app_phone, NULL, SOCKET_SET_SOCKET_ID(answer)); 458 fibril_rwlock_write_unlock(&lock);459 455 if(res == EOK){ 460 456 if(tl_get_ip_packet_dimension(udp_globals.ip_phone, &udp_globals.dimensions, DEVICE_INVALID_ID, &packet_dimension) == EOK){ … … 469 465 res = data_receive((void **) &addr, &addrlen); 470 466 if(res == EOK){ 471 fibril_rwlock_read_lock(&lock);472 467 fibril_rwlock_write_lock(&udp_globals.lock); 473 468 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); 474 469 fibril_rwlock_write_unlock(&udp_globals.lock); 475 fibril_rwlock_read_unlock(&lock);476 470 free(addr); 477 471 } … … 480 474 res = data_receive((void **) &addr, &addrlen); 481 475 if(res == EOK){ 482 fibril_rwlock_read_lock(&lock);483 476 fibril_rwlock_write_lock(&udp_globals.lock); 484 477 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)); … … 488 481 answer_count = 2; 489 482 } 490 fibril_rwlock_read_unlock(&lock);491 483 free(addr); 492 484 } 493 485 break; 494 486 case NET_SOCKET_RECVFROM: 495 fibril_rwlock_read_lock(&lock);496 487 fibril_rwlock_write_lock(&udp_globals.lock); 497 488 res = udp_recvfrom_message(&local_sockets, SOCKET_GET_SOCKET_ID(call), SOCKET_GET_FLAGS(call), &addrlen); 498 489 fibril_rwlock_write_unlock(&udp_globals.lock); 499 fibril_rwlock_read_unlock(&lock);500 490 if(res > 0){ 501 491 *SOCKET_SET_READ_DATA_LENGTH(answer) = res; … … 506 496 break; 507 497 case NET_SOCKET_CLOSE: 508 fibril_rwlock_write_lock(&lock);509 498 fibril_rwlock_write_lock(&udp_globals.lock); 510 499 res = socket_destroy(udp_globals.net_phone, SOCKET_GET_SOCKET_ID(call), &local_sockets, &udp_globals.sockets, NULL); 511 500 fibril_rwlock_write_unlock(&udp_globals.lock); 512 fibril_rwlock_write_unlock(&lock);513 501 break; 514 502 case NET_SOCKET_GETSOCKOPT:
Note:
See TracChangeset
for help on using the changeset viewer.