@@ -129,8 +129,11 @@ Object accept(PSocket socket) {
129
129
if (socket .getServerSocket () == null ) {
130
130
throw raiseOSError (null , OSErrorEnum .EINVAL );
131
131
}
132
- try (GilNode .UncachedRelease gil = GilNode .uncachedRelease ()) {
133
- SocketChannel acceptSocket = SocketUtils .accept (this , socket );
132
+ try {
133
+ SocketChannel acceptSocket ;
134
+ try (GilNode .UncachedRelease gil = GilNode .uncachedRelease ()) {
135
+ acceptSocket = SocketUtils .accept (this , socket );
136
+ }
134
137
if (acceptSocket == null ) {
135
138
throw raiseOSError (null , OSErrorEnum .EWOULDBLOCK );
136
139
}
@@ -209,12 +212,14 @@ Object connect(PSocket socket, PTuple address,
209
212
Object [] hostAndPort = getObjectArrayNode .execute (address );
210
213
gil .release (true );
211
214
try {
212
- doConnect (socket , hostAndPort );
215
+ try {
216
+ doConnect (socket , hostAndPort );
217
+ } finally {
218
+ gil .acquire ();
219
+ }
213
220
return PNone .NONE ;
214
221
} catch (IOException e ) {
215
222
throw raise (OSError );
216
- } finally {
217
- gil .acquire ();
218
223
}
219
224
}
220
225
@@ -353,17 +358,18 @@ Object recv(VirtualFrame frame, PSocket socket, int bufsize, int flags,
353
358
if (socket .getSocket () == null ) {
354
359
throw raiseOSError (frame , OSErrorEnum .ENOTCONN );
355
360
}
356
- gil .release (true );
357
361
ByteBuffer readBytes = PythonUtils .allocateByteBuffer (bufsize );
362
+ gil .release (true );
358
363
try {
359
- int length = SocketUtils .recv (this , socket , readBytes );
360
- gil .acquire ();
361
- return factory ().createBytes (PythonUtils .getBufferArray (readBytes ), length );
364
+ try {
365
+ int length = SocketUtils .recv (this , socket , readBytes );
366
+ return factory ().createBytes (PythonUtils .getBufferArray (readBytes ), length );
367
+ } finally {
368
+ gil .acquire ();
369
+ }
362
370
} catch (NotYetConnectedException e ) {
363
- gil .acquire ();
364
371
throw raiseOSError (frame , OSErrorEnum .ENOTCONN , e );
365
372
} catch (IOException e ) {
366
- gil .acquire ();
367
373
throw raiseOSError (frame , OSErrorEnum .EBADF , e );
368
374
}
369
375
}
@@ -436,40 +442,42 @@ Object recvInto(VirtualFrame frame, PSocket socket, PByteArray buffer, Object fl
436
442
if (socket .getSocket () == null ) {
437
443
throw raiseOSError (frame , OSErrorEnum .ENOTCONN );
438
444
}
439
- gil .release (true );
440
445
SequenceStorage storage = buffer .getSequenceStorage ();
441
446
int bufferLen = lenNode .execute (storage );
442
447
if (byteStorage .profile (storage instanceof ByteSequenceStorage )) {
443
448
ByteBuffer byteBuffer = ((ByteSequenceStorage ) storage ).getBufferView ();
449
+ gil .release (true );
444
450
try {
445
- int len = SocketUtils .recv (this , socket , byteBuffer );
446
- gil .acquire ();
447
- return len ;
451
+ try {
452
+ return SocketUtils .recv (this , socket , byteBuffer );
453
+ } finally {
454
+ gil .acquire ();
455
+ }
448
456
} catch (NotYetConnectedException e ) {
449
- gil .acquire ();
450
457
throw raiseOSError (frame , OSErrorEnum .ENOTCONN , e );
451
458
} catch (IOException e ) {
452
- gil .acquire ();
453
459
throw raiseOSError (frame , OSErrorEnum .EBADF , e );
454
460
}
455
461
} else {
456
462
byte [] targetBuffer = new byte [bufferLen ];
457
463
ByteBuffer byteBuffer = PythonUtils .wrapByteBuffer (targetBuffer );
458
464
int length ;
465
+ gil .release (true );
459
466
try {
460
- length = SocketUtils .recv (this , socket , byteBuffer );
467
+ try {
468
+ length = SocketUtils .recv (this , socket , byteBuffer );
469
+ } finally {
470
+ gil .acquire ();
471
+ }
461
472
} catch (NotYetConnectedException e ) {
462
- gil .acquire ();
463
473
throw raiseOSError (frame , OSErrorEnum .ENOTCONN , e );
464
474
} catch (IOException e ) {
465
- gil .acquire ();
466
475
throw raiseOSError (frame , OSErrorEnum .EBADF , e );
467
476
}
468
477
for (int i = 0 ; i < length ; i ++) {
469
478
// we don't allow generalization
470
479
setItem .execute (frame , storage , i , targetBuffer [i ]);
471
480
}
472
- gil .acquire ();
473
481
return length ;
474
482
}
475
483
}
@@ -507,17 +515,19 @@ Object send(VirtualFrame frame, PSocket socket, PBytes bytes, Object flags,
507
515
if (socket .getSocket () == null ) {
508
516
throw raiseOSError (frame , OSErrorEnum .ENOTCONN );
509
517
}
510
- gil .release (true );
511
518
int written ;
512
519
ByteBuffer buffer = PythonUtils .wrapByteBuffer (toBytes .execute (bytes .getSequenceStorage ()));
520
+ gil .release (true );
513
521
try {
514
- written = SocketUtils .send (this , socket , buffer );
522
+ try {
523
+ written = SocketUtils .send (this , socket , buffer );
524
+ } finally {
525
+ gil .acquire ();
526
+ }
515
527
} catch (NotYetConnectedException e ) {
516
528
throw raiseOSError (frame , OSErrorEnum .ENOTCONN );
517
529
} catch (IOException e ) {
518
530
throw raise (OSError );
519
- } finally {
520
- gil .acquire ();
521
531
}
522
532
if (written == 0 ) {
523
533
throw raiseOSError (frame , OSErrorEnum .EWOULDBLOCK );
@@ -539,7 +549,6 @@ Object sendAll(VirtualFrame frame, PSocket socket, PBytesLike bytes, Object flag
539
549
if (socket .getSocket () == null ) {
540
550
throw raiseOSError (frame , OSErrorEnum .ENOTCONN );
541
551
}
542
- gil .release (true );
543
552
ByteBuffer buffer = PythonUtils .wrapByteBuffer (toBytes .execute (bytes .getSequenceStorage ()));
544
553
long timeoutMillis = socket .getTimeoutInMilliseconds ();
545
554
TimeoutHelper timeoutHelper = null ;
@@ -551,14 +560,17 @@ Object sendAll(VirtualFrame frame, PSocket socket, PBytesLike bytes, Object flag
551
560
timeoutMillis = timeoutHelper .checkAndGetRemainingTimeout (this );
552
561
}
553
562
int written ;
563
+ gil .release (true );
554
564
try {
555
- written = SocketUtils .send (this , socket , buffer , timeoutMillis );
565
+ try {
566
+ written = SocketUtils .send (this , socket , buffer , timeoutMillis );
567
+ } finally {
568
+ gil .acquire ();
569
+ }
556
570
} catch (NotYetConnectedException e ) {
557
571
throw raiseOSError (frame , OSErrorEnum .ENOTCONN );
558
572
} catch (IOException e ) {
559
573
throw raise (OSError );
560
- } finally {
561
- gil .acquire ();
562
574
}
563
575
if (written == 0 ) {
564
576
throw raiseOSError (frame , OSErrorEnum .EWOULDBLOCK );
0 commit comments