On Tuesday, September 12, 2017 at 1:35:43 AM UTC-4, Dave Cheney wrote:
>
>
>
> On Tuesday, 12 September 2017 15:23:56 UTC+10, Shivaram Lingamneni wrote:
>>
>> So this proves it: "happens-after Listener.Close()" is not a sufficient 
>> condition for being able to rebind the address. If another goroutine is in 
>> a Listener.Accept() call, the new bind must happen-after the return of both 
>> the Listener.Close() and the Listener.Accept() calls.
>>
>
> Please see this code https://play.golang.org/p/j7ZxGbf4py
>

Just checking we're on the same page. Do we agree that:

1. Between lines 20 and 21, the address is unsafe for re-bind because there 
is no ordering guarantee with respect to line 12

2. After line 21, the address is safe for re-bind because execution there 
must happen-after the return of both:
a. the Close() call on line 20 (guaranteed because it executed previously 
in the same goroutine)
b. the Accept() call on line 12 (guaranteed by the Wait() call on line 21)

?


>> So the question is: are there any other conditions that can prevent 
>> Listener.Close() from resulting in close(2)? Is code that waits for the 
>> completion of both Close() and Accept() correct code?
>>
>
> Not for network sockets.
>

Thanks!
 

>  
>
>>
>> I don't understand the polling layer of the runtime to say whether it 
>> would be feasible for `Accept()` not to hold a reference during 
>> `WaitRead()` --- but it seems like that would be preferable.
>>
>
> Once Accept has returned, the readLock is returned. Accept returns when it 
> receives a connection, or its underlying socket is closed via l.Close()
>

I'm asking about a potential change to the runtime that would eliminate the 
need to wait for Accept() to return.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to