I just uploaded a working example to https://play.golang.org/p/88zT7hBLeD

It is a long running process so will need running locally on a machine as 
the playground kills it.  Hopefully this will help get to the bottom of it!

Lee

On Saturday, January 21, 2017 at 8:24:04 AM UTC, l...@pinkfroot.com wrote:
>
> Thanks Alex, 
>
> I did what I would call a halfway house so to speak...
>
> https://play.golang.org/p/fqPXXpNufO
>
> It ran for much longer before locking on the same line!  Trouble is, now I 
> can't actually see the lock whereas I could before!
>
> I'm wondering if I should keep a global channelMap and lock that with 
> sync.RWMutex and whether that may help?
>
> Lee
>
> On Saturday, January 21, 2017 at 3:01:08 AM UTC, Alex Bucataru wrote:
>>
>> Actually, a buffered channel alone is not enough...
>>
>> A more robust solution is to move the shutdown branch in jobDispatcher 
>> into a function; then call this function in a goroutine of its own right 
>> after you create shutdown channel. That will prevent the message sending 
>> and channel closing from deadlocking. You should also consider what you 
>> want to do with the messages still in the channel buffer at shutdown 
>> (probably drain the buffer and feed the messages back into a queue), and 
>> the possibility that the channel was closed between its successful 
>> retrieval from the map and the sending operation (recover from the panic 
>> and re-queue the message). Most likely, you would extract the other select 
>> branch from jobDispatcher into its own function. Something along the lines 
>> of this (not tested):
>>
>> https://play.golang.org/p/93CBCcMh5g
>>
>> Note that you still have a data race on access to the map. And probably 
>> need a way to gracefully shutdown the whole thing.
>>
>> Cheers,
>> Alex
>>
>> On Friday, 20 January 2017 17:10:48 UTC-5, l...@pinkfroot.com wrote:
>>>
>>> Yeah I did try with it enabled and it sees nothing.  I use it all the 
>>> time, it's great!!
>>>
>>> Thing is I can see the race condition in the code, just trying to work 
>>> out how to avoid it!
>>>
>>> On Friday, January 20, 2017 at 10:09:05 PM UTC, Val wrote:
>>>>
>>>> Did you try with the race detector enabled? What was the output?
>>>> If not, you really should, and it's super easy to do.
>>>> Any complain from the race detector is a bug that must be fixed, not a 
>>>> mere warning.
>>>>
>>>> Cheers
>>>> Val
>>>>
>>>> On Friday, January 20, 2017 at 8:10:42 PM UTC+1, l...@pinkfroot.com 
>>>> wrote:
>>>>  
>>>>
>>>>> It is kind of a race condition but one that I don't think will be 
>>>>> detected by the detector!
>>>>>
>>>>>

-- 
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