git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH/RFC 1/5] mingw: make fgetc raise SIGINT if apropriate

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Dec 4, 2012, 17:12 UTC
Message-ID
<alpine.DEB.1.00.1212041809150.31987@s15462909.onlinehome-server.info>
In-Reply-To
<CABPQNSaCV820zhJGdW++LMf2U7AeODSbfukix3fMfffmNex4YA@mail.gmail.com>
Hi kusma,
On Sat, 1 Dec 2012, Erik Faye-Lund wrote:
Show 15 quoted lines
> On Fri, Nov 30, 2012 at 6:58 PM, Johannes Schindelin
> <Johannes.Schindelin@gmx.de> wrote:
> > Hi,
> >
> > On Tue, 13 Nov 2012, Erik Faye-Lund wrote:
> >
> >> Set a control-handler to prevent the process from terminating, and
> >> simulate SIGINT so it can be handled by a signal-handler as usual.
> >
> > One thing you might want to mention is that the fgetc() handling is not
> > thread-safe, and intentionally so: if two threads read from the same
> > console, we are in trouble anyway.
> 
> I'm not entirely sure if I know what you mean. Do you suggest that two
> threads can race for setting the console ctrl-handler?
That was my idea, yes.
Show 6 quoted lines
> I don't think that's the case; "SetConsoleCtrlHandler(x, TRUE)" adds a
> console handler to the handler-chain, and SetConsoleCtrlHandler(x,
> FALSE) removes it. If two threads add handlers, it is my understanding
> that one of them will be run, only to report "no, no more ctrl-handling
> needed". Since both handlers block further ctrl-handling, I don't think
> there's a problem.

My idea was that the SetConsoleCtrlHandler(x, FALSE) could remove the handler prematurely iff another thread wanted to install the very same handler (but it was already installed by the first thread).

But as I said: for this to happen, *two* threads need to want to access the console for reading. In that case we'd be in bigger trouble than thread unsafety... We cannot read two passwords from the same console at the same time.

Ciao, Dscho

-- 
*** Please reply-to-all at all times ***
*** (do not pretend to know who is subscribed and who is not) ***
*** Please avoid top-posting. ***
The msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki - Github accounts are free.

You received this message because you are subscribed to the Google
Groups "msysGit" group.
To post to this group, send email to msysgit@googlegroups.com
To unsubscribe from this group, send email to
msysgit+unsubscribe@googlegroups.com
For more options, and view previous threads, visit this group at
http://groups.google.com/group/msysgit?hl=en_US?hl=en
Previous: Erik Faye-LundNext: Erik Faye-Lund
Message 8 of 27 in “win32: support echo for terminal-prompt”
  1. 0/5 win32: support echo for terminal-promptErik Faye-Lund, Nov 13, 2012
  2. 1/5 mingw: make fgetc raise SIGINT if apropriateErik Faye-Lund, Nov 13, 2012
  3. Johannes SchindelinNov 30, 2012
  4. Jeff KingNov 30, 2012
  5. Erik Faye-LundDec 1, 2012
  6. Jeff KingDec 1, 2012
  7. Erik Faye-LundDec 1, 2012
  8. Johannes SchindelinDec 4, 2012
  9. Erik Faye-LundDec 4, 2012
  10. Junio C HamanoDec 2, 2012
  11. Erik Faye-LundDec 3, 2012
  12. Junio C HamanoDec 4, 2012
  13. 2/5 compat/terminal: factor out echo-disablingErik Faye-Lund, Nov 13, 2012
  14. Johannes SchindelinNov 30, 2012
  15. Jeff KingNov 30, 2012
  16. Erik Faye-LundDec 1, 2012
  17. Johannes SchindelinDec 4, 2012
  18. 3/5 compat/terminal: separate input and output handlesErik Faye-Lund, Nov 13, 2012
  19. Jeff KingNov 30, 2012
  20. 4/5 mingw: reuse tty-version of git_terminal_promptErik Faye-Lund, Nov 13, 2012
  21. Johannes SchindelinNov 30, 2012
  22. Jeff KingNov 30, 2012
  23. 5/5 mingw: get rid of getpass implementationErik Faye-Lund, Nov 13, 2012
  24. Johannes SchindelinNov 30, 2012
  25. Jeff KingNov 30, 2012
  26. Erik Faye-LundNov 30, 2012
  27. Jeff KingNov 30, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.