Changes in uspace/srv/net/tl/tcp/tcp.c [ffa2c8ef:6b82009] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/tl/tcp/tcp.c
rffa2c8ef r6b82009 206 206 207 207 static int tcp_received_msg(device_id_t, packet_t *, services_t, services_t); 208 static int tcp_process_client_messages(ipc_callid_t, ipc_call_t); 208 static int tcp_process_client_messages(async_sess_t *, ipc_callid_t, 209 ipc_call_t); 209 210 210 211 static int tcp_listen_message(socket_cores_t *, int, int); … … 299 300 return tcp_release_and_return(packet, NO_DATA); 300 301 301 // printf("header len %d, port %d \n", TCP_HEADER_LENGTH(header), 302 // ntohs(header->destination_port)); 303 302 #if 0 303 printf("header len %d, port %d \n", TCP_HEADER_LENGTH(header), 304 ntohs(header->destination_port)); 305 #endif 304 306 result = packet_get_addr(packet, (uint8_t **) &src, (uint8_t **) &dest); 305 307 if (result <= 0) … … 323 325 324 326 if (!socket) { 325 if (tl_prepare_icmp_packet(tcp_globals.net_ phone,326 tcp_globals.icmp_ phone, packet, error) == EOK) {327 icmp_destination_unreachable_msg(tcp_globals.icmp_ phone,327 if (tl_prepare_icmp_packet(tcp_globals.net_sess, 328 tcp_globals.icmp_sess, packet, error) == EOK) { 329 icmp_destination_unreachable_msg(tcp_globals.icmp_sess, 328 330 ICMP_PORT_UNREACH, 0, packet); 329 331 } … … 396 398 fibril_rwlock_write_unlock(socket_data->local_lock); 397 399 398 rc = tl_prepare_icmp_packet(tcp_globals.net_ phone,399 tcp_globals.icmp_ phone, packet, error);400 rc = tl_prepare_icmp_packet(tcp_globals.net_sess, 401 tcp_globals.icmp_sess, packet, error); 400 402 if (rc == EOK) { 401 403 /* Checksum error ICMP */ 402 icmp_parameter_problem_msg(tcp_globals.icmp_ phone,404 icmp_parameter_problem_msg(tcp_globals.icmp_sess, 403 405 ICMP_PARAM_POINTER, 404 406 ((size_t) ((void *) &header->checksum)) - … … 438 440 break; 439 441 default: 440 pq_release_remote(tcp_globals.net_ phone, packet_get_id(packet));442 pq_release_remote(tcp_globals.net_sess, packet_get_id(packet)); 441 443 } 442 444 … … 475 477 old_incoming = socket_data->next_incoming; 476 478 477 if ( header->finalize) {479 if (GET_TCP_HEADER_FINALIZE(header)) { 478 480 socket_data->fin_incoming = new_sequence_number + 479 481 total_length - TCP_HEADER_LENGTH(header); … … 501 503 /* Release the acknowledged packets */ 502 504 next_packet = pq_next(packet); 503 pq_release_remote(tcp_globals.net_ phone,505 pq_release_remote(tcp_globals.net_sess, 504 506 packet_get_id(packet)); 505 507 packet = next_packet; … … 560 562 next_packet = pq_next(next_packet); 561 563 pq_insert_after(tmp_packet, next_packet); 562 pq_release_remote(tcp_globals.net_ phone,564 pq_release_remote(tcp_globals.net_sess, 563 565 packet_get_id(tmp_packet)); 564 566 } … … 597 599 if (packet == socket_data->incoming) 598 600 socket_data->incoming = next_packet; 599 pq_release_remote(tcp_globals.net_ phone,601 pq_release_remote(tcp_globals.net_sess, 600 602 packet_get_id(packet)); 601 603 packet = next_packet; … … 620 622 if (length <= 0) { 621 623 /* Remove the empty packet */ 622 pq_release_remote(tcp_globals.net_ phone,624 pq_release_remote(tcp_globals.net_sess, 623 625 packet_get_id(packet)); 624 626 packet = next_packet; … … 667 669 } 668 670 /* Remove the duplicit or corrupted packet */ 669 pq_release_remote(tcp_globals.net_ phone,671 pq_release_remote(tcp_globals.net_sess, 670 672 packet_get_id(packet)); 671 673 packet = next_packet; … … 694 696 if (rc != EOK) { 695 697 /* Remove the corrupted packets */ 696 pq_release_remote(tcp_globals.net_ phone,698 pq_release_remote(tcp_globals.net_sess, 697 699 packet_get_id(packet)); 698 pq_release_remote(tcp_globals.net_ phone,700 pq_release_remote(tcp_globals.net_sess, 699 701 packet_get_id(next_packet)); 700 702 } else { … … 707 709 new_sequence_number, length); 708 710 if (rc != EOK) { 709 pq_release_remote(tcp_globals.net_ phone,711 pq_release_remote(tcp_globals.net_sess, 710 712 packet_get_id(next_packet)); 711 713 } 712 714 rc = pq_insert_after(packet, next_packet); 713 715 if (rc != EOK) { 714 pq_release_remote(tcp_globals.net_ phone,716 pq_release_remote(tcp_globals.net_sess, 715 717 packet_get_id(next_packet)); 716 718 } … … 721 723 printf("unexpected\n"); 722 724 /* Release duplicite or restricted */ 723 pq_release_remote(tcp_globals.net_ phone, packet_get_id(packet));725 pq_release_remote(tcp_globals.net_sess, packet_get_id(packet)); 724 726 forced_ack = true; 725 727 } … … 789 791 if (rc != EOK) 790 792 return tcp_release_and_return(packet, rc); 791 rc = tl_get_ip_packet_dimension(tcp_globals.ip_ phone,793 rc = tl_get_ip_packet_dimension(tcp_globals.ip_sess, 792 794 &tcp_globals.dimensions, socket_data->device_id, &packet_dimension); 793 795 if (rc != EOK) … … 798 800 799 801 /* Notify the destination socket */ 800 async_ msg_5(socket->phone, NET_SOCKET_RECEIVED,801 802 async_exch_t *exch = async_exchange_begin(socket->sess); 803 async_msg_5(exch, NET_SOCKET_RECEIVED, (sysarg_t) socket->socket_id, 802 804 ((packet_dimension->content < socket_data->data_fragment_size) ? 803 805 packet_dimension->content : socket_data->data_fragment_size), 0, 0, 804 806 (sysarg_t) fragments); 807 async_exchange_end(exch); 805 808 806 809 return EOK; … … 819 822 820 823 /* Notify the destination socket */ 821 async_ msg_5(socket->phone, NET_SOCKET_RECEIVED,822 823 0, 0, 0, 824 (sysarg_t) 0 /* 0 fragments == no more data */);824 async_exch_t *exch = async_exchange_begin(socket->sess); 825 async_msg_5(exch, NET_SOCKET_RECEIVED, (sysarg_t) socket->socket_id, 826 0, 0, 0, (sysarg_t) 0 /* 0 fragments == no more data */); 827 async_exchange_end(exch); 825 828 } 826 829 … … 837 840 assert(packet); 838 841 839 if (! header->synchronize)842 if (!GET_TCP_HEADER_SYNCHRONIZE(header)) 840 843 return tcp_release_and_return(packet, EINVAL); 841 844 … … 848 851 next_packet = pq_detach(packet); 849 852 if (next_packet) { 850 pq_release_remote(tcp_globals.net_ phone,853 pq_release_remote(tcp_globals.net_sess, 851 854 packet_get_id(next_packet)); 852 855 } … … 902 905 assert(packet); 903 906 904 if (! header->synchronize)907 if (!GET_TCP_HEADER_SYNCHRONIZE(header)) 905 908 return tcp_release_and_return(packet, EINVAL); 906 909 … … 935 938 /* Create a socket */ 936 939 socket_id = -1; 937 rc = socket_create(socket_data->local_sockets, listening_socket-> phone,940 rc = socket_create(socket_data->local_sockets, listening_socket->sess, 938 941 socket_data, &socket_id); 939 942 if (rc != EOK) { … … 988 991 fibril_rwlock_write_unlock(&tcp_globals.lock); 989 992 if (rc != EOK) { 990 socket_destroy(tcp_globals.net_ phone, socket->socket_id,993 socket_destroy(tcp_globals.net_sess, socket->socket_id, 991 994 socket_data->local_sockets, &tcp_globals.sockets, 992 995 tcp_free_socket_data); … … 1000 1003 next_packet = pq_detach(packet); 1001 1004 if (next_packet) { 1002 pq_release_remote(tcp_globals.net_ phone,1005 pq_release_remote(tcp_globals.net_sess, 1003 1006 packet_get_id(next_packet)); 1004 1007 } … … 1009 1012 packet_get_data_length(packet) - sizeof(*header)); 1010 1013 if (rc != EOK) { 1011 socket_destroy(tcp_globals.net_ phone, socket->socket_id,1014 socket_destroy(tcp_globals.net_sess, socket->socket_id, 1012 1015 socket_data->local_sockets, &tcp_globals.sockets, 1013 1016 tcp_free_socket_data); … … 1020 1023 rc = tcp_queue_packet(socket, socket_data, packet, 1); 1021 1024 if (rc != EOK) { 1022 socket_destroy(tcp_globals.net_ phone, socket->socket_id,1025 socket_destroy(tcp_globals.net_sess, socket->socket_id, 1023 1026 socket_data->local_sockets, &tcp_globals.sockets, 1024 1027 tcp_free_socket_data); … … 1028 1031 packet = tcp_get_packets_to_send(socket, socket_data); 1029 1032 if (!packet) { 1030 socket_destroy(tcp_globals.net_ phone, socket->socket_id,1033 socket_destroy(tcp_globals.net_sess, socket->socket_id, 1031 1034 socket_data->local_sockets, &tcp_globals.sockets, 1032 1035 tcp_free_socket_data); … … 1056 1059 assert(packet); 1057 1060 1058 if (! header->acknowledge)1061 if (!GET_TCP_HEADER_ACKNOWLEDGE(header)) 1059 1062 return tcp_release_and_return(packet, EINVAL); 1060 1063 … … 1062 1065 tcp_process_acknowledgement(socket, socket_data, header); 1063 1066 1064 socket_data->next_incoming = ntohl(header->sequence_number); // + 1;1065 pq_release_remote(tcp_globals.net_ phone, packet_get_id(packet));1067 socket_data->next_incoming = ntohl(header->sequence_number); /* + 1; */ 1068 pq_release_remote(tcp_globals.net_sess, packet_get_id(packet)); 1066 1069 socket_data->state = TCP_SOCKET_ESTABLISHED; 1067 1070 listening_socket = socket_cores_find(socket_data->local_sockets, … … 1077 1080 if (rc == EOK) { 1078 1081 /* Notify the destination socket */ 1079 async_msg_5(socket->phone, NET_SOCKET_ACCEPTED, 1082 async_exch_t *exch = async_exchange_begin(socket->sess); 1083 async_msg_5(exch, NET_SOCKET_ACCEPTED, 1080 1084 (sysarg_t) listening_socket->socket_id, 1081 1085 socket_data->data_fragment_size, TCP_HEADER_SIZE, 1082 1086 0, (sysarg_t) socket->socket_id); 1087 async_exchange_end(exch); 1083 1088 1084 1089 fibril_rwlock_write_unlock(socket_data->local_lock); … … 1125 1130 assert(header); 1126 1131 1127 if (! header->acknowledge)1132 if (!GET_TCP_HEADER_ACKNOWLEDGE(header)) 1128 1133 return; 1129 1134 … … 1176 1181 /* Add to acknowledged or release */ 1177 1182 if (pq_add(&acknowledged, packet, 0, 0) != EOK) 1178 pq_release_remote(tcp_globals.net_ phone,1183 pq_release_remote(tcp_globals.net_sess, 1179 1184 packet_get_id(packet)); 1180 1185 packet = next; … … 1185 1190 /* Release acknowledged */ 1186 1191 if (acknowledged) { 1187 pq_release_remote(tcp_globals.net_ phone,1192 pq_release_remote(tcp_globals.net_sess, 1188 1193 packet_get_id(acknowledged)); 1189 1194 } … … 1229 1234 assert(answer); 1230 1235 assert(answer_count); 1231 1236 1232 1237 *answer_count = 0; 1233 switch (IPC_GET_IMETHOD(*call)) { 1234 case IPC_M_CONNECT_TO_ME: 1235 return tcp_process_client_messages(callid, *call); 1236 } 1237 1238 1239 async_sess_t *callback = 1240 async_callback_receive_start(EXCHANGE_SERIALIZE, call); 1241 if (callback) 1242 return tcp_process_client_messages(callback, callid, *call); 1243 1238 1244 return ENOTSUP; 1239 1245 } … … 1265 1271 } 1266 1272 1267 int tcp_process_client_messages(ipc_callid_t callid, ipc_call_t call) 1273 int tcp_process_client_messages(async_sess_t *sess, ipc_callid_t callid, 1274 ipc_call_t call) 1268 1275 { 1269 1276 int res; 1270 bool keep_on_going = true;1271 1277 socket_cores_t local_sockets; 1272 int app_phone = IPC_GET_PHONE(call);1273 1278 struct sockaddr *addr; 1274 1279 int socket_id; … … 1292 1297 fibril_rwlock_initialize(&lock); 1293 1298 1294 while ( keep_on_going) {1299 while (true) { 1295 1300 1296 1301 /* Answer the call */ … … 1300 1305 /* Get the next call */ 1301 1306 callid = async_get_call(&call); 1307 1308 if (!IPC_GET_IMETHOD(call)) { 1309 res = EHANGUP; 1310 break; 1311 } 1302 1312 1303 1313 /* Process the call */ 1304 1314 switch (IPC_GET_IMETHOD(call)) { 1305 case IPC_M_PHONE_HUNGUP:1306 keep_on_going = false;1307 res = EHANGUP;1308 break;1309 1310 1315 case NET_SOCKET: 1311 1316 socket_data = … … 1321 1326 fibril_rwlock_write_lock(&lock); 1322 1327 socket_id = SOCKET_GET_SOCKET_ID(call); 1323 res = socket_create(&local_sockets, app_phone,1328 res = socket_create(&local_sockets, sess, 1324 1329 socket_data, &socket_id); 1325 1330 SOCKET_SET_SOCKET_ID(answer, socket_id); … … 1329 1334 break; 1330 1335 } 1331 if (tl_get_ip_packet_dimension(tcp_globals.ip_ phone,1336 if (tl_get_ip_packet_dimension(tcp_globals.ip_sess, 1332 1337 &tcp_globals.dimensions, DEVICE_INVALID_ID, 1333 1338 &packet_dimension) == EOK) { … … 1504 1509 } 1505 1510 1506 /* Release the application phone*/1507 async_hangup( app_phone);1511 /* Release the application session */ 1512 async_hangup(sess); 1508 1513 1509 1514 printf("release\n"); 1510 1515 /* Release all local sockets */ 1511 socket_cores_release(tcp_globals.net_ phone, &local_sockets,1516 socket_cores_release(tcp_globals.net_sess, &local_sockets, 1512 1517 &tcp_globals.sockets, tcp_free_socket_data); 1513 1518 … … 1617 1622 local_lock = socket_data->local_lock; 1618 1623 fibril_rwlock_write_lock(local_lock); 1619 socket_destroy(tcp_globals.net_ phone,1624 socket_destroy(tcp_globals.net_sess, 1620 1625 timeout->socket_id, timeout->local_sockets, 1621 1626 &tcp_globals.sockets, tcp_free_socket_data); … … 1707 1712 if (socket->port > 0) { 1708 1713 socket_ports_exclude(&tcp_globals.sockets, 1709 socket->port );1714 socket->port, free); 1710 1715 socket->port = 0; 1711 1716 } … … 1750 1755 } 1751 1756 1752 rc = ip_get_route_req(tcp_globals.ip_ phone, IPPROTO_TCP,1757 rc = ip_get_route_req(tcp_globals.ip_sess, IPPROTO_TCP, 1753 1758 addr, addrlen, &socket_data->device_id, 1754 1759 &socket_data->pseudo_header, &socket_data->headerlen); … … 1832 1837 1833 1838 /* Remember the outgoing FIN */ 1834 if ( header->finalize)1839 if (GET_TCP_HEADER_FINALIZE(header)) 1835 1840 socket_data->fin_outgoing = socket_data->next_outgoing; 1836 1841 … … 1898 1903 rc = pq_insert_after(previous, copy); 1899 1904 if (rc != EOK) { 1900 pq_release_remote(tcp_globals.net_ phone,1905 pq_release_remote(tcp_globals.net_sess, 1901 1906 packet_get_id(copy)); 1902 1907 return sending; … … 1935 1940 socket_data->headerlen, packet_get_data_length(packet)); 1936 1941 if (rc != EOK) { 1937 pq_release_remote(tcp_globals.net_ phone, packet_get_id(packet));1942 pq_release_remote(tcp_globals.net_sess, packet_get_id(packet)); 1938 1943 return NULL; 1939 1944 } … … 1942 1947 header = (tcp_header_t *) packet_get_data(packet); 1943 1948 if (!header) { 1944 pq_release_remote(tcp_globals.net_ phone, packet_get_id(packet));1949 pq_release_remote(tcp_globals.net_sess, packet_get_id(packet)); 1945 1950 return NULL; 1946 1951 } … … 1951 1956 header->acknowledgement_number = 1952 1957 htonl(socket_data->next_incoming); 1953 header->acknowledge = 1;1958 SET_TCP_HEADER_ACKNOWLEDGE(header, 1); 1954 1959 } 1955 1960 header->window = htons(socket_data->window); … … 1967 1972 rc = ip_client_prepare_packet(packet, IPPROTO_TCP, 0, 0, 0, 0); 1968 1973 if (rc != EOK) { 1969 pq_release_remote(tcp_globals.net_ phone, packet_get_id(packet));1974 pq_release_remote(tcp_globals.net_sess, packet_get_id(packet)); 1970 1975 return NULL; 1971 1976 } … … 1974 1979 sequence_number, socket_data->state, socket_data->timeout, true); 1975 1980 if (rc != EOK) { 1976 pq_release_remote(tcp_globals.net_ phone, packet_get_id(packet));1981 pq_release_remote(tcp_globals.net_sess, packet_get_id(packet)); 1977 1982 return NULL; 1978 1983 } … … 1991 1996 1992 1997 /* Make a copy of the packet */ 1993 copy = packet_get_copy(tcp_globals.net_ phone, packet);1998 copy = packet_get_copy(tcp_globals.net_sess, packet); 1994 1999 if (!copy) 1995 2000 return NULL; … … 2005 2010 while (packet) { 2006 2011 next = pq_detach(packet); 2007 ip_send_msg(tcp_globals.ip_ phone, device_id, packet,2012 ip_send_msg(tcp_globals.ip_sess, device_id, packet, 2008 2013 SERVICE_TCP, 0); 2009 2014 packet = next; … … 2023 2028 header->source_port = htons(socket->port); 2024 2029 header->source_port = htons(socket_data->dest_port); 2025 header->header_length = TCP_COMPUTE_HEADER_LENGTH(sizeof(*header)); 2026 header->synchronize = synchronize; 2027 header->finalize = finalize; 2030 SET_TCP_HEADER_LENGTH(header, 2031 TCP_COMPUTE_HEADER_LENGTH(sizeof(*header))); 2032 SET_TCP_HEADER_SYNCHRONIZE(header, synchronize); 2033 SET_TCP_HEADER_FINALIZE(header, finalize); 2028 2034 } 2029 2035 … … 2117 2123 return NO_DATA; 2118 2124 2119 rc = packet_translate_remote(tcp_globals.net_ phone, &packet, packet_id);2125 rc = packet_translate_remote(tcp_globals.net_sess, &packet, packet_id); 2120 2126 if (rc != EOK) 2121 2127 return rc; … … 2128 2134 /* Release the packet */ 2129 2135 dyn_fifo_pop(&socket->received); 2130 pq_release_remote(tcp_globals.net_ phone, packet_get_id(packet));2136 pq_release_remote(tcp_globals.net_sess, packet_get_id(packet)); 2131 2137 2132 2138 /* Return the total length */ … … 2166 2172 return ENOTCONN; 2167 2173 2168 rc = tl_get_ip_packet_dimension(tcp_globals.ip_ phone,2174 rc = tl_get_ip_packet_dimension(tcp_globals.ip_sess, 2169 2175 &tcp_globals.dimensions, socket_data->device_id, &packet_dimension); 2170 2176 if (rc != EOK) … … 2177 2183 for (index = 0; index < fragments; index++) { 2178 2184 /* Read the data fragment */ 2179 result = tl_socket_read_packet_data(tcp_globals.net_ phone,2185 result = tl_socket_read_packet_data(tcp_globals.net_sess, 2180 2186 &packet, TCP_HEADER_SIZE, packet_dimension, 2181 2187 socket_data->addr, socket_data->addrlen); … … 2240 2246 default: 2241 2247 /* Just destroy */ 2242 rc = socket_destroy(tcp_globals.net_ phone, socket_id,2248 rc = socket_destroy(tcp_globals.net_sess, socket_id, 2243 2249 local_sockets, &tcp_globals.sockets, 2244 2250 tcp_free_socket_data); … … 2288 2294 2289 2295 /* Get the device packet dimension */ 2290 rc = tl_get_ip_packet_dimension(tcp_globals.ip_ phone,2296 rc = tl_get_ip_packet_dimension(tcp_globals.ip_sess, 2291 2297 &tcp_globals.dimensions, socket_data->device_id, &packet_dimension); 2292 2298 if (rc != EOK) … … 2294 2300 2295 2301 /* Get a new packet */ 2296 *packet = packet_get_4_remote(tcp_globals.net_ phone, TCP_HEADER_SIZE,2302 *packet = packet_get_4_remote(tcp_globals.net_sess, TCP_HEADER_SIZE, 2297 2303 packet_dimension->addr_len, packet_dimension->prefix, 2298 2304 packet_dimension->suffix); … … 2357 2363 if (rc != EOK) 2358 2364 return rc; 2359 rc = tl_get_ip_packet_dimension(tcp_globals.ip_ phone,2365 rc = tl_get_ip_packet_dimension(tcp_globals.ip_sess, 2360 2366 &tcp_globals.dimensions, socket_data->device_id, 2361 2367 &packet_dimension); … … 2429 2435 int tcp_release_and_return(packet_t *packet, int result) 2430 2436 { 2431 pq_release_remote(tcp_globals.net_ phone, packet_get_id(packet));2437 pq_release_remote(tcp_globals.net_sess, packet_get_id(packet)); 2432 2438 return result; 2433 2439 } … … 2437 2443 * @param[in] iid Message identifier. 2438 2444 * @param[in,out] icall Message parameters. 2445 * @param[in] arg Local argument. 2439 2446 * 2440 2447 */ 2441 static void tcp_receiver(ipc_callid_t iid, ipc_call_t *icall )2448 static void tcp_receiver(ipc_callid_t iid, ipc_call_t *icall, void *arg) 2442 2449 { 2443 2450 packet_t *packet; … … 2447 2454 switch (IPC_GET_IMETHOD(*icall)) { 2448 2455 case NET_TL_RECEIVED: 2449 rc = packet_translate_remote(tcp_globals.net_ phone, &packet,2456 rc = packet_translate_remote(tcp_globals.net_sess, &packet, 2450 2457 IPC_GET_PACKET(*icall)); 2451 2458 if (rc == EOK) … … 2465 2472 /** Initialize the TCP module. 2466 2473 * 2467 * @param[in] net_phone Network module phone.2474 * @param[in] sess Network module session. 2468 2475 * 2469 2476 * @return EOK on success. … … 2471 2478 * 2472 2479 */ 2473 int tl_initialize( int net_phone)2480 int tl_initialize(async_sess_t *sess) 2474 2481 { 2475 2482 fibril_rwlock_initialize(&tcp_globals.lock); 2476 2483 fibril_rwlock_write_lock(&tcp_globals.lock); 2477 2484 2478 tcp_globals.net_ phone = net_phone;2485 tcp_globals.net_sess = sess; 2479 2486 2480 tcp_globals.icmp_ phone = icmp_connect_module(ICMP_CONNECT_TIMEOUT);2481 tcp_globals.ip_ phone= ip_bind_service(SERVICE_IP, IPPROTO_TCP,2487 tcp_globals.icmp_sess = icmp_connect_module(); 2488 tcp_globals.ip_sess = ip_bind_service(SERVICE_IP, IPPROTO_TCP, 2482 2489 SERVICE_TCP, tcp_receiver); 2483 if (tcp_globals.ip_ phone < 0) {2490 if (tcp_globals.ip_sess == NULL) { 2484 2491 fibril_rwlock_write_unlock(&tcp_globals.lock); 2485 return tcp_globals.ip_phone;2492 return ENOENT; 2486 2493 } 2487 2494 … … 2492 2499 rc = packet_dimensions_initialize(&tcp_globals.dimensions); 2493 2500 if (rc != EOK) { 2494 socket_ports_destroy(&tcp_globals.sockets );2501 socket_ports_destroy(&tcp_globals.sockets, free); 2495 2502 goto out; 2496 2503 }
Note:
See TracChangeset
for help on using the changeset viewer.