bugThe GNU Hurd - Bugs: bug #3939, rpctrace:d program hangs when...

 
 

bug #3939: rpctrace:d program hangs when signal that terminates or suspends it is sent

Submitted by:  Ognyan Kulev <ogi>
Submitted on:  Tue 10 Jun 2003 02:24:58 PM UTC  
 
Category: Hurd InterfacesSeverity: 3 - Normal
Priority: 5 - NormalItem Group: None
Status: FixedPrivacy: Public
Assigned to: Marcus Brinkmann <marcus>Originator Name: 
Open/Closed: ClosedReproducibility: Every Time
Size (loc): Medium 30 - 200Planned Release: None
Effort: 0.50
Wiki-like text discussion box: 

Add a New Comment (Rich MarkupRich Markup):
   

You are not logged in

Please log in, so followups can be emailed to you.

 

Sun 01 Jul 2012 04:09:59 AM UTC, comment #3:

Fixed in ccbbdf63102a21e755cd17f68f6d8c43beda21ef, thanks Zheng Da!

Samuel Thibault <sthibaul>
Project Member
Sat 16 Aug 2003 10:25:16 PM UTC, comment #2:

The patch #1633 has been reverted. See the comment in there why and what could be done alternatively to fix this.

Marcus Brinkmann <marcus>
Project AdministratorIn charge of this item.
Sat 09 Aug 2003 04:51:11 PM UTC, comment #1:

Thanks for the report. This has been fixed by Patch #1633, which is now in CVS.

Marcus Brinkmann <marcus>
Project AdministratorIn charge of this item.
Tue 10 Jun 2003 02:24:58 PM UTC, original submission:

All RPC communication of a rpctrace:d programs is catched by rpctrace. When signal that terminates or suspends the traced task is sent, the special thread of the traced task that handles signals calls RPC proc_dostop_request to the proc server. This call, by design, suspends all threads of the traced task except the one that handles the signal. Unfortunately, actually all the threads are suspended, thus making the whole process to hang. Moreover, when a key is pressed the whole terminal hangs. This is probably because the traced task is no longer able to handle any input.

So, why proc_dostop_request can't recognize the signal thread of the traced task? Because proc_dostop_request receives 2 arguments: task_t process and thread_t contthread. The function gets all process threads and compare them to contthread. But contthread is changed by rpctrace! That's why all threads are suspended.

The easiest solution is to add special case to rpctrace processing. Though it is questionable whether this is the right thing to do.

Ognyan Kulev <ogi>
Project Member

 

(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

Attach File(s):
   
   
Comment:
   

No files currently attached

 

Depends on the following items: None found

Items that depend on this one: None found

 

Carbon-Copy List
  • -unavailable- added by sthibaul (Posted a comment)
  •  

    Do you think this task is very important?
    If so, you can click here to add your encouragement to it.
    This task has 0 encouragements so far.

    Only logged-in users can vote.

     

    Please enter the title of George Orwell's famous dystopian book (it's a date):

     

     

    Follow 12 latest changes.

    Date Changed By Updated Field Previous Value => Replaced By
    Sun 01 Jul 2012 04:09:59 AM UTCsthibaulStatusNone=>Fixed
      Open/ClosedOpen=>Closed
    Mon 26 Dec 2005 09:31:57 PM UTCamsStatusFixed=>None
    Sat 16 Aug 2003 10:25:16 PM UTCmarcusOpen/ClosedClosed=>(Error - Not Found)
      Size (loc)Low <30=>(Error - Not Found)
    Sat 09 Aug 2003 04:51:11 PM UTCmarcusOpen/ClosedOpen=>(Error - Not Found)
      ReproducibilityNone=>(Error - Not Found)
      Size (loc)None=>(Error - Not Found)
      Effort0.00=>
    Sat 09 Aug 2003 04:51:10 PM UTCmarcusAssigned toNone=>NA
    Sat 09 Aug 2003 04:51:09 PM UTCmarcusCategoryNone=>(Error - Not Found)
      StatusNone=>(Error - Not Found)

    Back to the top


    Powered by Savane 3.1-cleanup