Changeset 13670 in vbox for trunk/src/VBox/Devices/Network/slirp
- Timestamp:
- Oct 30, 2008 4:17:02 AM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 38623
- Location:
- trunk/src/VBox/Devices/Network/slirp
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Network/slirp/if.c
r13621 r13670 216 216 } 217 217 #ifdef VBOX_WITH_SYNC_SLIRP 218 RTSemMutexRelease(ifq->m_mutex); 218 219 RTSemMutexRequest(pData->if_batchq_mutex, RT_INDEFINITE_WAIT); 219 RTSemMutexRelease(ifq->m_mutex);220 220 ifq = ifqprev; 221 221 #endif … … 288 288 remque(pData, ifm->ifs_next); 289 289 #ifdef VBOX_WITH_SYNC_SLIRP 290 RTSemMutexRelease(pData->if_fastq_mutex); 290 291 RTSemMutexRequest(pData->if_batchq_mutex, RT_INDEFINITE_WAIT); 291 292 #endif … … 294 295 insque(pData, ifm->ifs_next, &if_batchq); 295 296 #ifdef VBOX_WITH_SYNC_SLIRP 296 RTSemMutexRelease(pData->if_fastq_mutex); 297 RTSemMutexRelease(pData->if_batchq_mutex); 297 RTSemMutexRelease(pData->if_batchq_mutex); 298 298 #endif 299 299 } … … 375 375 #ifdef VBOX_WITH_SYNC_SLIRP 376 376 RTSemMutexRelease(pData->if_fastq_mutex); 377 378 RTSemMutexRequest(pData->if_batchq_mutex, RT_INDEFINITE_WAIT); 377 379 RTSemMutexRequest(pData->next_m_mutex, RT_INDEFINITE_WAIT); 378 RTSemMutexRequest(pData->if_batchq_mutex, RT_INDEFINITE_WAIT);379 380 #endif 380 381 /* Nothing on fastq, see if next_m is valid */ … … 393 394 RTSemMutexRequest(ifm->m_mutex, RT_INDEFINITE_WAIT); 394 395 RTSemMutexRequest(pData->if_queued_mutex, RT_INDEFINITE_WAIT); 396 if (if_queued == 0) { 397 if (on_fast) { 398 RTSemMutexRelease(pData->if_fastq_mutex); 399 }else { 400 RTSemMutexRelease(pData->if_batchq_mutex); 401 } 402 goto done; 403 } 395 404 #endif 396 405 /* Remove it from the queue */ … … 430 439 /* Encapsulate the packet for sending */ 431 440 if_encap(pData, (const uint8_t *)ifm->m_data, ifm->m_len); 432 #ifdef VBOX_WITH_SYNC_SLIRP433 RTSemMutexRelease(ifm->m_mutex);434 #endif435 441 436 442 m_free(pData, ifm); 437 443 438 444 #ifdef VBOX_WITH_SYNC_SLIRP 445 if (ifm != NULL) RTSemMutexRelease(ifm->m_mutex); 439 446 RTSemMutexRequest(pData->if_queued_mutex, RT_INDEFINITE_WAIT); 440 447 /*We release if_queued_mutex after again label and before return*/ … … 443 450 goto again; 444 451 #ifdef VBOX_WITH_SYNC_SLIRP 452 done: 445 453 RTSemMutexRelease(pData->if_queued_mutex); 446 454 #endif -
trunk/src/VBox/Devices/Network/slirp/ip_input.c
r1076 r13670 74 74 DEBUG_ARG("m_len = %d", m->m_len); 75 75 76 #ifdef VBOX_WITH_SYNC_SLIRP 77 int rc; 78 rc = RTSemMutexRequest(m->m_mutex, RT_INDEFINITE_WAIT); 79 AssertReleaseRC(rc); 80 #endif 81 76 82 ipstat.ips_total++; 77 83 78 84 if (m->m_len < sizeof (struct ip)) { 79 85 ipstat.ips_toosmall++; 86 #ifdef VBOX_WITH_SYNC_SLIRP 87 rc = RTSemMutexRelease(m->m_mutex); 88 AssertReleaseRC(rc); 89 #endif 80 90 return; 81 91 } … … 208 218 case IPPROTO_TCP: 209 219 tcp_input(pData, m, hlen, (struct socket *)NULL); 220 #ifdef VBOX_WITH_SYNC_SLIRP 221 rc = RTSemMutexRelease(m->m_mutex); 222 AssertReleaseRC(rc); 223 #endif 210 224 break; 211 225 case IPPROTO_UDP: 212 226 udp_input(pData, m, hlen); 227 #ifdef VBOX_WITH_SYNC_SLIRP 228 rc = RTSemMutexRelease(m->m_mutex); 229 AssertReleaseRC(rc); 230 #endif 213 231 break; 214 232 case IPPROTO_ICMP: 215 233 icmp_input(pData, m, hlen); 234 #ifdef VBOX_WITH_SYNC_SLIRP 235 rc = RTSemMutexRelease(m->m_mutex); 236 AssertReleaseRC(rc); 237 #endif 216 238 break; 217 239 default: 218 240 ipstat.ips_noproto++; 219 241 m_free(pData, m); 242 #ifdef VBOX_WITH_SYNC_SLIRP 243 if (m != NULL) { 244 rc = RTSemMutexRelease(m->m_mutex); 245 AssertReleaseRC(rc); 246 } 247 #endif 220 248 } 221 249 return; 222 250 bad: 223 251 m_freem(pData, m); 252 #ifdef VBOX_WITH_SYNC_SLIRP 253 if (m != NULL) { 254 rc = RTSemMutexRelease(m->m_mutex); 255 AssertReleaseRC(rc); 256 } 257 #endif 224 258 return; 225 259 } -
trunk/src/VBox/Devices/Network/slirp/mbuf.c
r13639 r13670 91 91 } 92 92 #ifdef VBOX_WITH_SYNC_SLIRP 93 RTSemMutexRequest(m->m_mutex, RT_INDEFINITE_WAIT); 94 RTSemMutexRelease(pData->m_freelist_mutex); 93 95 RTSemMutexRequest(pData->m_usedlist_mutex, RT_INDEFINITE_WAIT); 94 96 #endif … … 96 98 /* Insert it in the used list */ 97 99 insque(pData, m,&m_usedlist); 100 #ifdef VBOX_WITH_SYNC_SLIRP 101 RTSemMutexRelease(pData->m_usedlist_mutex); 102 #endif 98 103 m->m_flags = (flags | M_USEDLIST); 99 #ifdef VBOX_WITH_SYNC_SLIRP100 RTSemMutexRequest(m->m_mutex, RT_INDEFINITE_WAIT);101 RTSemMutexRelease(pData->m_usedlist_mutex);102 RTSemMutexRelease(pData->m_freelist_mutex);103 #endif104 104 105 105 /* Initialise it */ … … 154 154 free(m); 155 155 #ifdef VBOX_WITH_SYNC_SLIRP 156 m = NULL; 156 157 RTSemMutexRequest(pData->mbuf_alloced_mutex, RT_INDEFINITE_WAIT); 157 158 mbuf_alloced--; … … 168 169 #ifdef VBOX_WITH_SYNC_SLIRP 169 170 RTSemMutexRelease(pData->m_freelist_mutex); 170 RTSemMutexRelease(m->m_mutex);171 171 #endif 172 172 } 173 #ifdef VBOX_WITH_SYNC_SLIRP 174 if (m != NULL) RTSemMutexRelease(m->m_mutex); 175 #endif 173 176 } /* if(m) */ 174 177 } … … 195 198 m->m_len += n->m_len; 196 199 197 #ifdef VBOX_WITH_SYNC_SLIRP198 RTSemMutexRelease(m->m_mutex);199 RTSemMutexRelease(n->m_mutex);200 #endif201 200 m_free(pData, n); 201 #ifdef VBOX_WITH_SYNC_SLIRP 202 RTSemMutexRelease(m->m_mutex); 203 if (n != NULL) RTSemMutexRelease(n->m_mutex); 204 #endif 202 205 } 203 206 … … 323 326 for (m = m_usedlist.m_next; m != &m_usedlist; m = m->m_next) { 324 327 #else 328 struct mbuf *mnext; 325 329 RTSemMutexRequest(pData->m_usedlist_mutex, RT_INDEFINITE_WAIT); 326 330 m = m_usedlist.m_next; 327 331 while(1) { 328 332 RTSemMutexRequest(m->m_mutex, RT_INDEFINITE_WAIT); 333 mnext = m->m_next; 329 334 RTSemMutexRelease(pData->m_usedlist_mutex); 330 335 #endif … … 347 352 RTSemMutexRelease(m->m_mutex); 348 353 RTSemMutexRequest(pData->m_usedlist_mutex, RT_INDEFINITE_WAIT); 349 m = m ->m_next;354 m = mnext; 350 355 #endif 351 356 } -
trunk/src/VBox/Devices/Network/slirp/slirp.c
r13604 r13670 235 235 rc = RTSemMutexCreate(&pData->udb_mutex); 236 236 AssertReleaseRC(rc); 237 rc = RTSemMutexCreate(&pData->udp_last_so_mutex); 238 AssertReleaseRC(rc); 237 239 rc = RTSemMutexCreate(&pData->if_queued_mutex); 238 240 AssertReleaseRC(rc); … … 460 462 before_loop_ends: 461 463 /*Release of global tcb mutex happens in the head of loop*/ 464 RTSemMutexRelease(so->so_mutex); 462 465 RTSemMutexRequest(pData->tcb_mutex, RT_INDEFINITE_WAIT); 463 RTSemMutexRelease(so->so_mutex);464 466 so = so_next; 465 467 #endif … … 516 518 #ifdef VBOX_WITH_SYNC_SLIRP 517 519 before_udp_loop_end: 520 RTSemMutexRelease(so->so_mutex); 518 521 RTSemMutexRequest(pData->udb_mutex, RT_INDEFINITE_WAIT); 519 RTSemMutexRelease(so->so_mutex);520 522 so = so_next; 521 523 #endif … … 739 741 #ifdef VBOX_WITH_SYNC_SLIRP 740 742 before_loop_ends: 743 RTSemMutexRelease(so->so_mutex); 741 744 RTSemMutexRequest(pData->tcb_mutex, RT_INDEFINITE_WAIT); 742 RTSemMutexRelease(so->so_mutex);743 745 so = so_next; 744 746 #endif … … 770 772 } 771 773 #ifdef VBOX_WITH_SYNC_SLIRP 774 RTSemMutexRelease(so->so_mutex); 772 775 RTSemMutexRequest(pData->udb_mutex, RT_INDEFINITE_WAIT); 773 RTSemMutexRelease(so->so_mutex);774 776 so = so_next; 775 777 #endif … … 784 786 if_start(pData); 785 787 #else 786 #if 0788 #if 1 787 789 if (link_up) { 788 790 RTSemMutexRequest(pData->if_queued_mutex, RT_INDEFINITE_WAIT); … … 887 889 struct mbuf *m; 888 890 int proto; 891 #ifdef VBOX_WITH_SYNC_SLIRP 892 int rc; 893 #endif 889 894 890 895 if (pkt_len < ETH_HLEN) … … 902 907 903 908 m = m_get(pData); 909 #ifdef VBOX_WITH_SYNC_SLIRP 910 if (m != NULL) { 911 rc = RTSemMutexRequest(m->m_mutex, RT_INDEFINITE_WAIT); 912 AssertReleaseRC(rc); 913 } 914 #endif 904 915 if (!m) 905 916 return; … … 915 926 916 927 ip_input(pData, m); 928 #ifdef VBOX_WITH_SYNC_SLIRP 929 rc = RTSemMutexRelease(m->m_mutex); 930 AssertReleaseRC(rc); 931 #endif 917 932 break; 918 933 default: -
trunk/src/VBox/Devices/Network/slirp/slirp_state.h
r13640 r13670 177 177 */ 178 178 RTSEMMUTEX udb_mutex; 179 /* 180 * used for access udp_last_so global pointer avoiding overusing of udb_mutex. 181 */ 182 RTSEMMUTEX udp_last_so_mutex; 179 183 #endif 180 184 } NATState; -
trunk/src/VBox/Devices/Network/slirp/socket.c
r13622 r13670 101 101 102 102 if (so->so_type == IPPROTO_UDP) { 103 RTSemMutexRequest(pData->ud b_mutex, RT_INDEFINITE_WAIT);103 RTSemMutexRequest(pData->udp_last_so_mutex, RT_INDEFINITE_WAIT); 104 104 } 105 105 else if (so->so_type == IPPROTO_TCP) { … … 119 119 120 120 if (so->so_type == IPPROTO_UDP) { 121 RTSemMutexRelease(pData->ud b_mutex);121 RTSemMutexRelease(pData->udp_last_so_mutex); 122 122 } 123 123 else if (so->so_type == IPPROTO_TCP) { … … 387 387 sosendoob(so); 388 388 if (sb->sb_cc == 0) 389 #ifdef VBOX_WITH_SYNC_SLIRP 390 RTSemMutexRelease(so->so_mutex); 391 #endif 389 392 return 0; 390 393 } -
trunk/src/VBox/Devices/Network/slirp/tcp_subr.c
r13617 r13670 262 262 DEBUG_CALL("tcp_close"); 263 263 DEBUG_ARG("tp = %lx", (long )tp); 264 #ifdef VBOX_WITH_SYNC_SLIRP265 /*sofree destrys so_mutex*/266 RTSemMutexRequest(so->so_mutex, RT_INDEFINITE_WAIT);267 #endif268 264 269 265 /* free the reassembly queue, if any */ … … 280 276 */ 281 277 /* free(tp, M_PCB); */ 278 #ifdef VBOX_WITH_SYNC_SLIRP 279 RTSemMutexRequest(pData->tcb_mutex, RT_INDEFINITE_WAIT); 280 /*sofree destrys so_mutex*/ 281 RTSemMutexRequest(so->so_mutex, RT_INDEFINITE_WAIT); 282 #endif 282 283 u32ptr_done(pData, ptr_to_u32(pData, tp), tp); 283 284 free(tp); … … 292 293 sofree(pData, so); 293 294 tcpstat.tcps_closed++; 295 #ifdef VBOX_WITH_SYNC_SLIRP 296 RTSemMutexRelease(pData->tcb_mutex); 297 #endif 294 298 return ((struct tcpcb *)0); 295 299 } -
trunk/src/VBox/Devices/Network/slirp/udp.c
r13604 r13670 77 77 DEBUG_ARG("m = %lx", (long)m); 78 78 DEBUG_ARG("iphlen = %d", iphlen); 79 #ifdef VBOX_WITH_SYNC_SLIRP 80 int rc; 81 rc = RTSemMutexRequest(m->m_mutex, RT_INDEFINITE_WAIT); 82 AssertReleaseRC(rc); 83 #endif 79 84 80 85 udpstat.udps_ipackets++; … … 156 161 * Locate pcb for datagram. 157 162 */ 163 #ifndef VBOX_WITH_SYNC_SLIRP 158 164 so = udp_last_so; 159 165 if (so->so_lport != uh->uh_sport || 160 166 so->so_laddr.s_addr != ip->ip_src.s_addr) { 161 167 struct socket *tmp; 162 163 168 for (tmp = udb.so_next; tmp != &udb; tmp = tmp->so_next) { 169 #else 170 rc = RTSemMutexRequest(pData->udp_last_so_mutex, RT_INDEFINITE_WAIT); 171 AssertReleaseRC(rc); 172 173 so = udp_last_so; 174 if (so != &udb) { 175 rc = RTSemMutexRequest(so->so_mutex, RT_INDEFINITE_WAIT); 176 AssertReleaseRC(rc); 177 } 178 179 rc = RTSemMutexRelease(pData->udp_last_so_mutex); 180 AssertReleaseRC(rc); 181 182 if (so->so_lport != uh->uh_sport || 183 so->so_laddr.s_addr != ip->ip_src.s_addr) { 184 struct socket *tmp; 185 struct socket *tmp_next; 186 if (so != &udb) { 187 /*we don't interesting in this socket any more*/ 188 rc = RTSemMutexRelease(so->so_mutex); 189 AssertReleaseRC(rc); 190 } 191 rc = RTSemMutexRequest(pData->udb_mutex, RT_INDEFINITE_WAIT); 192 AssertReleaseRC(rc); 193 tmp = udb.so_next; 194 195 while (1) { 196 if (tmp == &udb) { 197 rc = RTSemMutexRelease(pData->udb_mutex); 198 AssertReleaseRC(rc); 199 break; 200 } 201 tmp_next = tmp->so_next; 202 rc = RTSemMutexRequest(tmp->so_mutex, RT_INDEFINITE_WAIT); 203 AssertReleaseRC(rc); 204 rc = RTSemMutexRelease(pData->udb_mutex); 205 AssertReleaseRC(rc); 206 #endif 164 207 if (tmp->so_lport == uh->uh_sport && 165 208 tmp->so_laddr.s_addr == ip->ip_src.s_addr) { … … 167 210 break; 168 211 } 212 #ifdef VBOX_WITH_SYNC_SLIRP 213 rc = RTSemMutexRelease(tmp->so_mutex); 214 AssertReleaseRC(rc); 215 rc = RTSemMutexRequest(pData->udb_mutex, RT_INDEFINITE_WAIT); 216 AssertReleaseRC(rc); 217 tmp = tmp_next; 218 #endif 169 219 } 170 220 if (tmp == &udb) { 171 221 so = NULL; 172 222 } else { 223 #ifdef VBOX_WITH_SYNC_SLIRP 224 rc = RTSemMutexRequest(pData->udp_last_so_mutex, RT_INDEFINITE_WAIT); 225 AssertReleaseRC(rc); 226 #endif 173 227 udpstat.udpps_pcbcachemiss++; 174 228 udp_last_so = so; 229 #ifdef VBOX_WITH_SYNC_SLIRP 230 rc = RTSemMutexRelease(pData->udp_last_so_mutex); 231 AssertReleaseRC(rc); 232 #endif 175 233 } 176 234 } 177 235 236 #ifndef VBOX_WITH_SYNC_SLIRP 178 237 if (so == NULL) { 238 #else 239 if (so == NULL || so == &udb) { 240 #endif 179 241 /* 180 242 * If there's no socket for this packet, … … 182 244 */ 183 245 if ((so = socreate()) == NULL) goto bad; 246 #ifdef VBOX_WITH_SYNC_SLIRP 247 rc = RTSemMutexRequest(so->so_mutex, RT_INDEFINITE_WAIT); 248 AssertReleaseRC(rc); 249 #endif 184 250 if(udp_attach(pData, so) == -1) { 185 251 DEBUG_MISC((dfd," udp_attach errno = %d-%s\n", … … 234 300 so->so_m=m; /* ICMP backup */ 235 301 302 #ifdef VBOX_WITH_SYNC_SLIRP 303 rc = RTSemMutexRelease(so->so_mutex); 304 AssertReleaseRC(rc); 305 rc = RTSemMutexRelease(m->m_mutex); 306 AssertReleaseRC(rc); 307 #endif 236 308 return; 237 309 bad: 238 310 m_freem(pData, m); 239 311 /* if (opts) m_freem(opts); */ 312 #ifdef VBOX_WITH_SYNC_SLIRP 313 if (m != NULL) { 314 rc = RTSemMutexRelease(m->m_mutex); 315 AssertReleaseRC(rc); 316 } 317 #endif 240 318 return; 241 319 } … … 247 325 register struct udpiphdr *ui; 248 326 int error = 0; 327 #ifdef VBOX_WITH_SYNC_SLIRP 328 int rc; 329 if(so != NULL) { 330 rc = RTSemMutexRequest(so->so_mutex, RT_INDEFINITE_WAIT); 331 AssertReleaseRC(rc); 332 } 333 rc = RTSemMutexRequest(m->m_mutex, RT_INDEFINITE_WAIT); 334 AssertReleaseRC(rc); 335 #endif 249 336 250 337 DEBUG_CALL("udp_output"); … … 292 379 293 380 error = ip_output(pData, so, m); 294 381 #ifdef VBOX_WITH_SYNC_SLIRP 382 if (so != NULL) rc = RTSemMutexRelease(so->so_mutex); 383 rc = RTSemMutexRelease(m->m_mutex); 384 #endif 295 385 return (error); 296 386 } … … 300 390 { 301 391 struct sockaddr_in saddr, daddr; 392 #ifdef VBOX_WITH_SYNC_SLIRP 393 int status; 394 int rc; 395 rc = RTSemMutexRequest(so->so_mutex, RT_INDEFINITE_WAIT); 396 AssertReleaseRC(rc); 397 #endif 302 398 303 399 saddr = *addr; … … 316 412 daddr.sin_port = so->so_lport; 317 413 414 #ifdef VBOX_WITH_SYNC_SLIRP 415 status = udp_output2(pData, so, m, &saddr, &daddr, so->so_iptos); 416 rc = RTSemMutexRelease(so->so_mutex); 417 AssertReleaseRC(rc); 418 return status; 419 #else 318 420 return udp_output2(pData, so, m, &saddr, &daddr, so->so_iptos); 421 #endif 319 422 } 320 423 … … 323 426 { 324 427 struct sockaddr_in addr; 428 #ifdef VBOX_WITH_SYNC_SLIRP 429 int rc; 430 rc = RTSemMutexRequest(so->so_mutex, RT_INDEFINITE_WAIT); 431 AssertReleaseRC(rc); 432 #endif 325 433 326 434 if((so->s = socket(AF_INET,SOCK_DGRAM,0)) != -1) { … … 337 445 closesocket(so->s); 338 446 so->s=-1; 447 #ifdef VBOX_WITH_SYNC_SLIRP 448 AssertRelease(so->s != -1); 449 #endif 339 450 #ifdef _WIN32 340 451 WSASetLastError(lasterrno); … … 348 459 /* enable broadcast for later use */ 349 460 setsockopt(so->s, SOL_SOCKET, SO_BROADCAST, (const char *)&opt, sizeof(opt)); 461 #ifdef VBOX_WITH_SYNC_SLIRP 462 rc = RTSemMutexRequest(pData->udb_mutex, RT_INDEFINITE_WAIT); 463 AssertReleaseRC(rc); 464 #endif 350 465 insque(pData, so,&udb); 466 #ifdef VBOX_WITH_SYNC_SLIRP 467 rc = RTSemMutexRelease(pData->udb_mutex); 468 AssertReleaseRC(rc); 469 #endif 351 470 } 352 471 } 353 472 #ifdef VBOX_WITH_SYNC_SLIRP 354 473 so->so_type = IPPROTO_UDP; 474 rc = RTSemMutexRelease(so->so_mutex); 475 AssertReleaseRC(rc); 355 476 #endif 356 477 return(so->s); … … 361 482 { 362 483 /* Correctly update list if detaching last socket in list. */ 484 #ifdef VBOX_WITH_SYNC_SLIRP 485 int rc; 486 rc = RTSemMutexRequest(so->so_mutex, RT_INDEFINITE_WAIT); 487 AssertReleaseRC(rc); 488 rc = RTSemMutexRequest(pData->udp_last_so_mutex, RT_INDEFINITE_WAIT); 489 AssertReleaseRC(rc); 490 #endif 363 491 if (so == udp_last_so) udp_last_so = &udb; 492 #ifdef VBOX_WITH_SYNC_SLIRP 493 rc = RTSemMutexRelease(pData->udp_last_so_mutex); 494 AssertReleaseRC(rc); 495 #endif 364 496 closesocket(so->s); 365 497 /* if (so->so_m) m_free(so->so_m); done by sofree */ … … 381 513 { 382 514 int i = 0; 515 #ifdef VBOX_WITH_SYNC_SLIRP 516 int rc; 517 #endif 383 518 384 519 while(udptos[i].tos) { 385 520 if ((udptos[i].fport && ntohs(so->so_fport) == udptos[i].fport) || 386 521 (udptos[i].lport && ntohs(so->so_lport) == udptos[i].lport)) { 522 #ifdef VBOX_WITH_SYNC_SLIRP 523 rc = RTSemMutexRequest(so->so_mutex, RT_INDEFINITE_WAIT); 524 AssertReleaseRC(rc); 525 #endif 387 526 so->so_emu = udptos[i].emu; 527 #ifdef VBOX_WITH_SYNC_SLIRP 528 rc = RTSemMutexRelease(so->so_mutex); 529 AssertReleaseRC(rc); 530 #endif 388 531 return udptos[i].tos; 389 532 } … … 406 549 struct sockaddr_in addr; 407 550 socklen_t addrlen = sizeof(addr); 551 #ifdef VBOX_WITH_SYNC_SLIRP 552 int rc; 553 #endif 408 554 #ifdef EMULATE_TALK 409 555 CTL_MSG_OLD *omsg; … … 434 580 uint16_t pkt_len; /* packet length */ 435 581 } *cu_head; 582 583 #ifdef VBOX_WITH_SYNC_SLIRP 584 rc = RTSemMutexRequest(so->so_mutex, RT_INDEFINITE_WAIT); 585 AssertReleaseRC(rc); 586 #define return \ 587 do { \ 588 int rc; \ 589 rc = RTSemMutexRelease(so->so_mutex); \ 590 AssertReleaseRC(rc); \ 591 return; \ 592 }while(0) 593 #endif 436 594 437 595 switch(so->so_emu) { … … 625 783 return; 626 784 } 785 #ifdef VBOX_WITH_SYNC_SLIRP 786 return; 787 #undef return 788 #endif 627 789 } 628 790 … … 634 796 socklen_t addrlen = sizeof(struct sockaddr_in); 635 797 int opt = 1; 798 #ifdef VBOX_WITH_SYNC_SLIRP 799 int rc; 800 #endif 636 801 637 802 if ((so = socreate()) == NULL) { … … 641 806 so->s = socket(AF_INET,SOCK_DGRAM,0); 642 807 so->so_expire = curtime + SO_EXPIRE; 808 #ifdef VBOX_WITH_SYNC_SLIRP 809 rc = RTSemMutexRequest(so->so_mutex, RT_INDEFINITE_WAIT); 810 AssertReleaseRC(rc); 811 rc = RTSemMutexRequest(pData->udb_mutex, RT_INDEFINITE_WAIT); 812 AssertReleaseRC(rc); 813 #endif 643 814 insque(pData, so,&udb); 815 #ifdef VBOX_WITH_SYNC_SLIRP 816 rc = RTSemMutexRelease(pData->udb_mutex); 817 AssertReleaseRC(rc); 818 #endif 644 819 645 820 addr.sin_family = AF_INET; … … 670 845 671 846 so->so_state = SS_ISFCONNECTED; 847 #ifdef VBOX_WITH_SYNC_SLIRP 848 rc = RTSemMutexRelease(so->so_mutex); 849 AssertReleaseRC(rc); 850 #endif 672 851 673 852 return so;
Note:
See TracChangeset
for help on using the changeset viewer.