mirror of
https://github.com/genodelabs/genode.git
synced 2025-04-08 03:45:24 +00:00
base: aquire context mutex in local_submit()
Some signal-heavy scenarios (e.g., libc_integration) produced the following warning that hinted a data race on signal data in the context object. Warning: returning signal with num == 0 The cause was the use of Signal_context::local_submit() in the libc introduced in 424ed1b79a4 libc: remove Reconstructible / use local_submit in kernel in combination with a missing context-mutex aquisition resulting in a data race on Signal_context::_curr_signal. Issue #3923
This commit is contained in:
parent
377f2166a1
commit
8661936d7d
@ -85,7 +85,7 @@ void Signal_receiver::_platform_begin_dissolve(Signal_context * const c)
|
||||
{
|
||||
Mutex::Guard context_guard(c->_mutex);
|
||||
c->_pending = true;
|
||||
c->_curr_signal = Signal::Data(nullptr, 0);
|
||||
c->_curr_signal = Signal::Data();
|
||||
}
|
||||
Kernel::kill_signal_context(Capability_space::capid(c->_cap));
|
||||
}
|
||||
@ -166,7 +166,7 @@ Signal Signal_receiver::pending_signal()
|
||||
_contexts.head(context._next);
|
||||
context._pending = false;
|
||||
result = context._curr_signal;
|
||||
context._curr_signal = Signal::Data(0, 0);
|
||||
context._curr_signal = Signal::Data();
|
||||
|
||||
Trace::Signal_received trace_event(context, result.num);
|
||||
return true;
|
||||
|
@ -117,6 +117,7 @@ namespace Genode {
|
||||
void Signal_context::local_submit()
|
||||
{
|
||||
if (_receiver) {
|
||||
Mutex::Guard guard(_mutex);
|
||||
/* construct and locally submit signal object */
|
||||
Signal::Data signal(this, 1);
|
||||
_receiver->local_submit(signal);
|
||||
@ -261,7 +262,7 @@ Signal Signal_receiver::pending_signal()
|
||||
_contexts.head(context._next);
|
||||
context._pending = false;
|
||||
result = context._curr_signal;
|
||||
context._curr_signal = Signal::Data(0, 0);
|
||||
context._curr_signal = Signal::Data();
|
||||
|
||||
Trace::Signal_received trace_event(context, result.num);
|
||||
return true;
|
||||
|
Loading…
x
Reference in New Issue
Block a user