[haiku-bugs] [Haiku] #5713: calling exit from a thread other than the main thread returns the wrong value to caller

  • From: "andrewbachmann" <trac@xxxxxxxxxxxx>
  • Date: Sun, 11 Apr 2010 20:24:06 -0000

#5713: calling exit from a thread other than the main thread returns the wrong
value to caller
-----------------------------------+----------------------------------------
 Reporter:  andrewbachmann         |       Owner:  nobody   
     Type:  bug                    |      Status:  new      
 Priority:  normal                 |   Milestone:  R1       
Component:  - General              |     Version:  R1/alpha1
 Keywords:  main thread exit team  |   Blockedby:           
 Platform:  All                    |    Blocking:           
-----------------------------------+----------------------------------------
 In OpenJDK, ::exit(<value>) is called from a thread other than the main
 thread.  In this case, Haiku doesn't return <value> as the result of the
 program.  Instead it returned 149.  It is also printing "Kill Thread" but
 I am unclear if that is a result of my attempts to work around this issue.

 AnEvilYak on IRC suggested looking at src/system/kernel/team.cpp method
 _user_exit_team and I believe the fix is to add the line "thread =
 thread->team->main_thread;" before the exit status is assigned.

 Alternatively, assign the exit status and reason to both the main thread
 and calling thread, if that works.

 Here's how to work around the bug:

 1. wrap all calls to ::exit with a method that stores the exit value
 2. use atexit() to hook up an exit handler that first signals the main
 thread, and then suspends itself
 3. create a signal handler that kill_threads the other threads, and after
 they have all died, performs exit_thread() with the stored exit value

 <whew!>

 BeOS had this bug too although the fix was slightly different in that I
 called ::exit again in the signal handler instead of exit_thread.  That
 version does not work on haiku. (hangs instead)

-- 
Ticket URL: <http://dev.haiku-os.org/ticket/5713>
Haiku <http://dev.haiku-os.org>
Haiku - the operating system.

Other related posts: