Mercurial > pub > ImplabNet
comparison Implab/Parallels/MTQueue.cs @ 24:ee04e1fa78da
fixed dispatch pool race condition
| author | cin |
|---|---|
| date | Thu, 14 Nov 2013 01:15:07 +0400 |
| parents | e3935fdf59a2 |
| children | 1714fd8678ef |
comparison
equal
deleted
inserted
replaced
| 23:f0568ff069a5 | 24:ee04e1fa78da |
|---|---|
| 42 next = first.next; | 42 next = first.next; |
| 43 if (next == null) { | 43 if (next == null) { |
| 44 // this is the last element, | 44 // this is the last element, |
| 45 // then try to update the tail | 45 // then try to update the tail |
| 46 if (first != Interlocked.CompareExchange(ref m_last, null, first)) { | 46 if (first != Interlocked.CompareExchange(ref m_last, null, first)) { |
| 47 // this is a ace condition | 47 // this is a race condition |
| 48 if (m_last == null) | 48 if (m_last == null) |
| 49 // the queue is empty | 49 // the queue is empty |
| 50 return false; | 50 return false; |
| 51 // tail has been changed, than we need to restart | 51 // tail has been changed, than we need to restart |
| 52 continue; | 52 continue; |
