Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <pedro@codesourcery.com>
To: gdb-patches@sourceware.org
Subject: Re: [RFC] win32-nat.c 'set new-console' and interruption
Date: Mon, 23 Jun 2008 19:24:00 -0000	[thread overview]
Message-ID: <200806231922.10798.pedro@codesourcery.com> (raw)
In-Reply-To: <20080623173620.GA10962@ednor.casa.cgf.cx>

A Monday 23 June 2008 18:36:20, Christopher Faylor wrote:
> On Mon, Jun 23, 2008 at 03:41:26PM +0100, Pedro Alves wrote:
> >Another option is to use SuspendThread on all threads to stop the
> >process, which is what I believe Visual Studio uses.  gdbserver has
> >that implemented for systems that don't have DebugBreakProcess.
>
> It may be ok in Windows XP and beyond (I haven't checked) but I don't
> believe you can reliably use SuspendThread otherwise.  If you suspend a
> thread at the wrong point you can cause problems.

It may have been a problem with earlier Windows versions (maybe deadlocking
on some global internal lock, but evidence is scarse).  Not sure it's a
real problem.  Would pretty much make it useless if you can't use it from a
debugger.  google is riddled with articles claiming not to use it, but
those are aimed at application developers who confuse it with a locking
primitive.  I don't believe that when WaitForDebugEvent returns
with all threads stopped, there has been any kind of special magic
done that SuspendThread wouldn't trigger.  Sure, it is dangerous to use 
SuspendThreads to suspend threads in the current process (as
some stack walking libs do), as the deadlock risk is higher
then, like deadlocking on output or painting routines; but that is a
non-issue for a debugger.

I know for sure MSFT's Windows CE debugger (I bet it's the same
codebase as the desktop debugger) uses SuspendThread to stop the process,
as enabling its debug output tells the whole world.  :-)  I did notice
that it was GetThreadContext that seemed to do the blocking
waiting for the thread to suspend in user-code (and noticed other
weirdnesses around that, that seemed CE specific).

I know you've been all over this before, but for the archives:

Quoting from MSDN:
 "If the function succeeds, execution of the specified thread is suspended and  
 the thread's suspend count is incremented. Suspending a thread causes the  
 thread to stop executing *user-mode* (application) code."

 "This function is primarily designed for use by debuggers. It is not intended 
 to be used for thread synchronization. (...)"

I sure hope we can use it if/when we get to implement non-stop mode for
Windows.

Anyway, back to the original issue: do we really need to translate
that SIGTRAP into a SIGINT (from a DebugBreakProcess) ?

-- 
Pedro Alves


  reply	other threads:[~2008-06-23 18:22 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-21 17:05 Pierre Muller
2008-06-21 18:37 ` Christopher Faylor
2008-06-22  3:17   ` Daniel Jacobowitz
2008-06-22  3:18     ` Corinna Vinschen
2008-06-23  1:04       ` Christopher Faylor
2008-06-23  1:10         ` Corinna Vinschen
2008-06-23  7:40         ` Pierre Muller
2008-06-23 12:00           ` Christopher Faylor
2008-06-23 16:05             ` Pierre Muller
2008-06-23 17:00               ` Pedro Alves
2008-06-23 17:25                 ` Pierre Muller
2008-06-23 18:03                 ` Christopher Faylor
2008-06-23 19:24                   ` Pedro Alves [this message]
2008-06-23 20:33                     ` Pierre Muller
2008-06-23 21:06                       ` Joel Brobecker
2008-06-24  6:33                         ` Christopher Faylor
2008-06-24 13:36                           ` [RFC-v3] " Pierre Muller
2008-06-24  2:33                     ` [RFC] " Christopher Faylor
2008-06-24 13:54                       ` Pedro Alves
2008-06-24 18:29                         ` Christopher Faylor
2008-06-22  9:00     ` Christopher Faylor
2008-06-23  8:52   ` [RFC v2] " Pierre Muller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200806231922.10798.pedro@codesourcery.com \
    --to=pedro@codesourcery.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox