Commit e0f1cd7
committed
type-context.h: Extent cancel_mutex lock to prevent theoretical race
As pointed out by janb84 in
bitcoin/bitcoin#34422 (comment) it makes
sense for the on_cancel callback to lock cancel_mutex while it is assigning
request_canceled = true.
The lock and assigment were introduced in bitcoin-core#240 and in an earlier version of
that PR, request_canceled was a std::atomic and the assignment happened before
the lock was acquired instead of after, so it was ok for the lock to be unnamed
and immediately released after being acquired.
But in the final verion of bitcoin-core#240 request_canceled is an ordinary non-atomic
bool, and it should be assigned true with the lock held to prevent a
theoretical race condition where capn'proto event loop cancels the request
before the execution thread runs, and the execution thread sees the old
request_canceled = false value and then unsafely accesses deleted parameters.
The request being canceled so quickly and parameters being accessed so slowly,
and stale request_canceled value being read even after the execution thread has
the cancel_mutex lock should be very unlikely to occur in practice, but could
happen in theory and is good to fix.1 parent 290702c commit e0f1cd7
1 file changed
+1
-1
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
123 | 123 | | |
124 | 124 | | |
125 | 125 | | |
126 | | - | |
| 126 | + | |
127 | 127 | | |
128 | 128 | | |
129 | 129 | | |
| |||
0 commit comments