haiku/headers/private/kernel
Pawel Dziepak b167307526 kernel: Properly synchronize suspending new thread
After load_image() the child thread is suspended and the parent is
expected to resume it later. However, it is possible that the parent
attempts to resume its child after it has been notified that the image
had been loaded but before the child managed to suspend itself. In such
case the child would suspends itself after that wake up attempt and,
consequently will not be ever resumed.

To mitigate that problem flag Thread::going_to_suspend has been added
which helps synchronizing thread suspension and continuation in a similar
way that "traditional" thread blocking is performed. This means that
the child should behave in a following manner: set its going_to_suspend flag,
notify the parent (i.e. any thread that may want to resume it), acquire
its scheduler_lock and suspend itself if the going_to_suspend flag is set.
The parent should follow pattern: clear going_to_suspend flag of the thread
that is about to be resumed, acquire that thread scheduler_lock and enqueue
it in a run queue if it is suspended.

Thanks Oliver for reporting the bug and identifying what causes it.
2014-03-17 02:40:12 +01:00
..
arch ARM: Name beagleboneblk back to beagle 2014-02-26 15:33:40 -06:00
boot kernel: Add missing smp memory barrier calls. Set max cpu to 1 2014-01-19 19:33:21 -06:00
disk_device_manager * Added file_system_module_info::uninitialize() analogously to 2011-06-13 01:53:11 +00:00
fs Style cleanup. 2012-10-08 13:59:16 +02:00
platform OF: Make sure the of_region templatized struct is packed 2012-11-06 16:34:01 +01:00
posix Merged the signals branch into trunk, with these changes: 2011-01-10 21:54:38 +00:00
slab Add new operator that takes an ObjectCache* and allocation flags and 2011-11-02 21:12:09 +00:00
util trim support code: The passed in MemoryDeleter was never used. 2014-01-22 22:23:31 +01:00
vm Merge branch 'scheduler' 2014-01-17 04:06:15 +01:00
AllocationTracking.h Move AllocationTrackingInfo into a header. This way it can be re-used outside 2011-11-04 18:03:34 +00:00
block_cache.h Added block_cache_used_memory() that returns the memory allocated by all 2008-08-06 00:09:31 +00:00
boot_device.h * vfs_boot.cpp now also exports gReadOnlyBootDevice which is true when the 2009-06-05 15:52:58 +00:00
boot_item.h
boot_splash.h * Added an explicit boot_splash_uninit(). Not really needed, but makes 2008-07-09 15:25:01 +00:00
commpage.h commpage: randomize position of commpage 2013-04-04 15:27:22 +02:00
condition_variable.h kernel: Remove gSchedulerLock 2013-11-08 02:41:26 +01:00
console.h
cpu.h kernel: fix missing SMP_MAX_CPUS on non-x86 2014-01-19 14:09:51 -06:00
debug_heap.h Add debug_calloc() to the debug_heap. 2012-07-01 06:37:25 +02:00
debug_hex_dump.h Add a hex dump utility for use in KDL commands 2013-11-25 12:45:36 +01:00
debug_paranoia.h
debug.h mmlr + bonefish: 2011-11-01 17:19:26 +00:00
debugger_keymaps.h Add missing pipe character in KDL keymap. 2014-01-27 10:57:11 +01:00
DPC.h kernel: DPC: remove schedulerLocked argument 2013-11-04 23:51:18 +01:00
elf_priv.h Support ELF64 in the kernel. 2012-07-09 11:11:38 +01:00
elf.h Implemented user debugging support for x86_64. 2012-08-07 20:20:42 +01:00
file_cache.h * Moved the VM headers into subdirectory vm/. 2009-12-02 18:05:10 +00:00
frame_buffer_console.h * If the VESA driver remaps the frame buffer on init, it will now also make 2010-01-01 14:54:41 +00:00
generic_syscall.h * Introduced new header directory headers/private/system which is supposed 2008-05-14 03:55:16 +00:00
heap.h Allow replacing the object cache with the guarded heap. 2011-12-04 13:52:06 +01:00
int.h x86[_64]: Support assigning MSI IRQs to arbitrary CPU 2013-12-20 01:07:08 +01:00
kdevice_manager.h * Integration of the new driver architecture. 2008-05-26 16:52:27 +00:00
kdriver_settings.h * Initialize all static mutexes in the kernel through a MUTEX_INITIALIZER() 2008-06-05 23:19:27 +00:00
kernel_c++_structs.h Attempt at allowing to use C++ structures in C only code: We use the 2009-12-02 10:56:10 +00:00
kernel_daemon.h * Refactored the kernel daemon code into a class. 2008-08-22 01:13:18 +00:00
kernel.h Increased kernel stack size by another page for 64-bit 2013-11-04 18:53:49 +01:00
kimage.h Merged the signals branch into trunk, with these changes: 2011-01-10 21:54:38 +00:00
kmodule.h * Call module_init_post_boot_device() right after the boot volume has 2008-09-26 23:59:53 +00:00
kscheduler.h kernel: Remove cpu_info::load 2014-01-03 19:44:57 +01:00
ksignal.h commpage: randomize position of commpage 2013-04-04 15:27:22 +02:00
ksyscalls.h
ksystem_info.h kernel, libroot: Introduce new API for obtaining system info 2013-12-16 03:58:43 +01:00
listeners.h kernel: Remove gSchedulerLock 2013-11-08 02:41:26 +01:00
load_tracking.h kernel: Adjust load tracking interval 2014-02-06 03:23:28 +01:00
lock.h kernel/x86: Inline atomic functions and memory barriers 2014-01-06 09:08:53 +01:00
low_resource_manager.h * The kernel's address space is now also a resource that is known to the low 2009-11-27 13:03:28 +00:00
messaging.h
MessagingServiceDefs.h Remove remaining unnecessary 'volatile' qualifiers 2013-11-06 00:03:07 +01:00
Notifications.h Rework DefaultNotificationService registration. 2013-04-22 18:42:21 -04:00
port.h Reduce lock contention in kernel port subsystem. 2013-10-26 16:10:03 +02:00
real_time_clock.h Merged signals-merge branch into trunk with the following changes: 2011-06-12 00:00:23 +00:00
safemode.h kernel safemode: Add functions to get options early 2013-12-10 19:05:47 +01:00
scheduling_analysis.h Changed ConditionVariable from class to struct to make it more C-friendly. 2009-06-22 23:49:05 +00:00
sem.h Merged the signals branch into trunk, with these changes: 2011-01-10 21:54:38 +00:00
smp.h kernel: Add CPUSet::{Clear, Set}BitAtomic() functions 2014-01-24 13:59:58 +01:00
syscall_restart.h trim: Added is_called_via_syscall() function. 2013-11-07 19:06:13 +01:00
system_profiler.h * It seems we always have to specify all flags to make it work; removed "flags" 2009-07-21 12:09:15 +00:00
team.h kernel: Remove gSchedulerLock 2013-11-08 02:41:26 +01:00
thread_types.h kernel: Properly synchronize suspending new thread 2014-03-17 02:40:12 +01:00
thread.h kernel: Properly synchronize suspending new thread 2014-03-17 02:40:12 +01:00
timer.h kernel: Remove B_TIMER_ACQUIRE_SCHEDULER_LOCK flag 2013-10-31 01:49:43 +01:00
tracing.h bonefish+mmlr: 2011-11-02 16:02:07 +00:00
user_atomic.h arm/atomic: round of atomic function changes 2014-02-15 11:46:12 +01:00
user_debugger.h Remove remaining unnecessary 'volatile' qualifiers 2013-11-06 00:03:07 +01:00
user_mutex.h * Moved created subdirectory src/system/kernel/lock.cpp to new subdirectory 2010-04-11 16:07:39 +00:00
UserEvent.h kernel/UserEvent: Make sure UserEvent object is valid during DPC 2014-03-17 02:40:12 +01:00
usergroup.h Merged signals-merge branch into trunk with the following changes: 2011-06-12 00:00:23 +00:00
UserTimer.h kernel: Protect UserTimers with sUserTimerLock 2013-11-05 05:36:05 +01:00
vfs.h Merge branch 'master' into package-management 2013-05-05 15:03:26 +02:00
wait_for_objects.h Remove remaining unnecessary 'volatile' qualifiers 2013-11-06 00:03:07 +01:00