History log of /haiku/src/system/kernel/UserEvent.cpp
Revision Date Author Comments
# bf685cdf 01-Nov-2014 Michael Lotz <mmlr@mlotz.ch>

kernel: Fix missing reference release in CreateThreadEvent.

CreateThreadEvent::DoDPC() missed a reference release to balance the
acquired reference before queuing the DPC, resulting in the
CreateThreadEvent objects being leaked.

This also removes the destructor that tried to cancel the DPC. Since
the class is reference counted and only destroyed when the DPC has
run and released the last reference, this didn't make much sense.


# 6a80e688 31-Oct-2014 Michael Lotz <mmlr@mlotz.ch>

kernel: Fix missing reference to team/thread in signal events.

The signal to the team/thread is only actually sent in a deferred
procedure. To ensure that the team/thread stays valid between the DPC
being queued and it actually running, we need to acquire a reference.

Fixes #11390, where the DPC was run after the team was already
destroyed.


# d7e1e3e0 16-Mar-2014 Pawel Dziepak <pdziepak@quarnos.org>

kernel/UserEvent: Make sure UserEvent object is valid during DPC

Most of the actual UserEvent work is done in DPC so that we don't have
to care about the limitations of the context in which UserEvent::Fire()
is invoked. This requires appropriate management of lifetime of UserEvent
instances to make sure that DoDPC() method is always called on a valid
object.


# 03451e4c 23-Jan-2014 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Fix deadlock with thread sending signal to itself

UserEvent can be fired from scheduler_reschedule() i.e. while holding current
thread scheduler_lock. If the current thread goes sleep and during reschedule
one of its timers sends a signel to it, then scheduler_enqueue_in_run_queue()
attempts to acquire again its scheduler_lock resulting in a deadlock.

There was also a minor issue with both scheduler_reschedule() and
scheduler_enqueue_in_run_queue() acquiring current CPU scheduler mode lock.


# 3519eb33 06-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Change Thread::team_lock to rw_spinlock


# aa4aca02 06-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Protect signal data with Team::signal_lock


# 077c84eb 05-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: atomic_*() functions rework

* No need for the atomically changed variables to be declared as
volatile.
* Drop support for atomically getting and setting unaligned data.
* Introduce atomic_get_and_set[64]() which works the same as
atomic_set[64]() used to. atomic_set[64]() does not return the
previous value anymore.


# e7dba861 05-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: User{Event, Timer}: Use atomic access where necessary


# f4b088a9 04-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Protect UserTimers with sUserTimerLock


# 958f6d00 04-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Make UserEvent::Fire() work without gSchedulerLock held


# 24df6592 11-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Merged signals-merge branch into trunk with the following changes:
* Reorganized the kernel locking related to threads and teams.
* We now discriminate correctly between process and thread signals. Signal
handlers have been moved to teams. Fixes #5679.
* Implemented real-time signal support, including signal queuing, SA_SIGINFO
support, sigqueue(), sigwaitinfo(), sigtimedwait(), waitid(), and the addition
of the real-time signal range. Closes #1935 and #2695.
* Gave SIGBUS a separate signal number. Fixes #6704.
* Implemented <time.h> clock and timer support, and fixed/completed alarm() and
[set]itimer(). Closes #5682.
* Implemented support for thread cancellation. Closes #5686.
* Moved send_signal() from <signal.h> to <OS.h>. Fixes #7554.
* Lots over smaller more or less related changes.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42116 a95241bf-73f2-0310-859d-f6bbb57e9c96


# bf685cdf2e311bc47c131369fdaf3ca4b64416fe 01-Nov-2014 Michael Lotz <mmlr@mlotz.ch>

kernel: Fix missing reference release in CreateThreadEvent.

CreateThreadEvent::DoDPC() missed a reference release to balance the
acquired reference before queuing the DPC, resulting in the
CreateThreadEvent objects being leaked.

This also removes the destructor that tried to cancel the DPC. Since
the class is reference counted and only destroyed when the DPC has
run and released the last reference, this didn't make much sense.


# 6a80e6889ad1f00ec1c8ec1193ff5e346fcd73b7 31-Oct-2014 Michael Lotz <mmlr@mlotz.ch>

kernel: Fix missing reference to team/thread in signal events.

The signal to the team/thread is only actually sent in a deferred
procedure. To ensure that the team/thread stays valid between the DPC
being queued and it actually running, we need to acquire a reference.

Fixes #11390, where the DPC was run after the team was already
destroyed.


# d7e1e3e0120b00c88cae7a6828dd727062873dfe 16-Mar-2014 Pawel Dziepak <pdziepak@quarnos.org>

kernel/UserEvent: Make sure UserEvent object is valid during DPC

Most of the actual UserEvent work is done in DPC so that we don't have
to care about the limitations of the context in which UserEvent::Fire()
is invoked. This requires appropriate management of lifetime of UserEvent
instances to make sure that DoDPC() method is always called on a valid
object.


# 03451e4cc166588ed1b399bb97acaf3a043283ff 23-Jan-2014 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Fix deadlock with thread sending signal to itself

UserEvent can be fired from scheduler_reschedule() i.e. while holding current
thread scheduler_lock. If the current thread goes sleep and during reschedule
one of its timers sends a signel to it, then scheduler_enqueue_in_run_queue()
attempts to acquire again its scheduler_lock resulting in a deadlock.

There was also a minor issue with both scheduler_reschedule() and
scheduler_enqueue_in_run_queue() acquiring current CPU scheduler mode lock.


# 3519eb334ac161e88fa56bcef287a2275a1c963e 06-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Change Thread::team_lock to rw_spinlock


# aa4aca0264aa285e07c0b8e43112ac06803fcd2e 06-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Protect signal data with Team::signal_lock


# 077c84eb27b25430428d356f3d13afabc0cc0d13 05-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: atomic_*() functions rework

* No need for the atomically changed variables to be declared as
volatile.
* Drop support for atomically getting and setting unaligned data.
* Introduce atomic_get_and_set[64]() which works the same as
atomic_set[64]() used to. atomic_set[64]() does not return the
previous value anymore.


# e7dba861fd89792538442cc1b01584f7dabbd4a9 05-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: User{Event, Timer}: Use atomic access where necessary


# f4b088a992fefefc87aae57643aca05d81826cca 04-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Protect UserTimers with sUserTimerLock


# 958f6d00aad9ce038ea1b96a92e9d70099bb396b 04-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Make UserEvent::Fire() work without gSchedulerLock held


# 24df65921befcd0ad0c5c7866118f922da61cb96 11-Jun-2011 Ingo Weinhold <ingo_weinhold@gmx.de>

Merged signals-merge branch into trunk with the following changes:
* Reorganized the kernel locking related to threads and teams.
* We now discriminate correctly between process and thread signals. Signal
handlers have been moved to teams. Fixes #5679.
* Implemented real-time signal support, including signal queuing, SA_SIGINFO
support, sigqueue(), sigwaitinfo(), sigtimedwait(), waitid(), and the addition
of the real-time signal range. Closes #1935 and #2695.
* Gave SIGBUS a separate signal number. Fixes #6704.
* Implemented <time.h> clock and timer support, and fixed/completed alarm() and
[set]itimer(). Closes #5682.
* Implemented support for thread cancellation. Closes #5686.
* Moved send_signal() from <signal.h> to <OS.h>. Fixes #7554.
* Lots over smaller more or less related changes.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42116 a95241bf-73f2-0310-859d-f6bbb57e9c96