History log of /haiku/src/servers/registrar/mime/RegistrarThreadManager.cpp
Revision Date Author Comments
# 462bfeed 23-Aug-2015 Michael Lotz <mmlr@mlotz.ch>

registrar: Fix race condition on MimeUpdateThread termination.

When the MimeUpdateThread is done, it marks itself as finished and
notifies the thread manager to clean up finished threads. Since multiple
such threads might finish at the same time and trigger the cleanup
notification, other threads that already marked themselves finished but
haven't actually exited yet might already be deleted and removed. This
would then lead to a use-after-free when they subsequently tried to send
their own cleanup message.

To solve the race condition, the thread manager will now wait for the
thread to actually exit before cleaning it up.

The introduction of the launch_daemon has made this race condition more
likely due to more applications starting in parallel, each triggering a
CreateAppMetaMimeThread which is a subclass of MimeUpdateThread. This
commit might therefore fix #12237.


# dfb3208f 22-Aug-2015 Michael Lotz <mmlr@mlotz.ch>

registrar: Whitespace and style cleanup only.

Generally this code still looks horrible (both from a style and from a
complexity point of view) and should eventually be reworked.


# 50cedfd5 02-Aug-2012 Alex Smith <alex@alex-smith.me.uk>

Build registrar for x86_64.


# 71279b24 03-Dec-2008 Rene Gollent <anevilyak@gmail.com>

Adjust the thread counting to use atomic adds. This should prevent the previous scenario where many more threads than the limit could actually be spawned.



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


# 781a7155 26-Mar-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

Move RegistrarThread[Manager].cpp to the registrar. There was no point
in those living in libbe.


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


# 462bfeede0cd123afe2e79d465876289e925ca53 23-Aug-2015 Michael Lotz <mmlr@mlotz.ch>

registrar: Fix race condition on MimeUpdateThread termination.

When the MimeUpdateThread is done, it marks itself as finished and
notifies the thread manager to clean up finished threads. Since multiple
such threads might finish at the same time and trigger the cleanup
notification, other threads that already marked themselves finished but
haven't actually exited yet might already be deleted and removed. This
would then lead to a use-after-free when they subsequently tried to send
their own cleanup message.

To solve the race condition, the thread manager will now wait for the
thread to actually exit before cleaning it up.

The introduction of the launch_daemon has made this race condition more
likely due to more applications starting in parallel, each triggering a
CreateAppMetaMimeThread which is a subclass of MimeUpdateThread. This
commit might therefore fix #12237.


# dfb3208fa3856c5c6d582fb826b7c991c67fa54d 22-Aug-2015 Michael Lotz <mmlr@mlotz.ch>

registrar: Whitespace and style cleanup only.

Generally this code still looks horrible (both from a style and from a
complexity point of view) and should eventually be reworked.


# 50cedfd5b01a968c2da00bfd014360b24a3aac66 02-Aug-2012 Alex Smith <alex@alex-smith.me.uk>

Build registrar for x86_64.


# 71279b24ddba72562faab3304ba0797412467098 03-Dec-2008 Rene Gollent <anevilyak@gmail.com>

Adjust the thread counting to use atomic adds. This should prevent the previous scenario where many more threads than the limit could actually be spawned.



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


# 781a715529c3dde0d9a29e441d517dce5791123d 26-Mar-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

Move RegistrarThread[Manager].cpp to the registrar. There was no point
in those living in libbe.


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