Control: forwarded -1 https://github.com/GeorgeFilipkin/pulsemixer/issues/86

On 2023-12-13 19:53 +0100, Sven Joachim wrote:

> Package: pulsemixer
> Version: 1.5.1-1.1
> Severity: normal
>
> Sending SIGINT to pulsemixer (e.g. by pressing Ctrl-C) prints a
> traceback on stdout:
>
> ,----
> | Traceback (most recent call last):
> |   File "/usr/lib/python3.11/curses/__init__.py", line 94, in wrapper
> |     return func(stdscr, *args, **kwds)
> |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
> |   File "/usr/bin/pulsemixer", line 1275, in run
> |     c = self.getch()
> |         ^^^^^^^^^^^^
> |   File "/usr/bin/pulsemixer", line 1103, in getch
> |     self.ev.wait()
> |   File "/usr/lib/python3.11/threading.py", line 629, in wait
> |     signaled = self._cond.wait(timeout)
> |                ^^^^^^^^^^^^^^^^^^^^^^^^
> |   File "/usr/lib/python3.11/threading.py", line 327, in wait
> |     waiter.acquire()
> |   File "/usr/bin/pulsemixer", line 1243, in <lambda>
> |     signal.signal(signal.SIGINT, lambda s, f: self.terminate())
> |                                               ^^^^^^^^^^^^^^^^
> |   File "/usr/bin/pulsemixer", line 1228, in terminate
> |     sys.exit()
> | SystemExit
> |
> | During handling of the above exception, another exception occurred:
> |
> | Traceback (most recent call last):
> |   File "/usr/bin/pulsemixer", line 2054, in <module>
> |     main()
> |   File "/usr/bin/pulsemixer", line 1948, in main
> |     curses.wrapper(Screen(CFG.ui.color, CFG.ui.mouse).run)
> |   File "/usr/lib/python3.11/curses/__init__.py", line 101, in wrapper
> |     endwin()
> | _curses.error: endwin() returned ERR
> `----
>
> The reason is that curses.endwin() is run twice, by the signal handler
> pulsemixer sets up and by curses.wrapper.  In ncurses patchlevel
> 20231111 and later, calling endwin() twice in a row is considered an
> error.  See bug #1058041 for more information.
>
> This is the signal handler which pulsemixer sets up:
>
> ,----
> |     def terminate(self):
> |         # if ^C pressed while sleeping in reconnect wrapper.restore won't 
> be called
> |         # so have to restore it manually here
> |         self.screen.keypad(0)
> |         curses.echo()
> |         curses.nocbreak()
> |         curses.endwin()
> |         sys.exit()
> `----
>
> I don't know if the comment is actually true, this should best be
> discussed with upstream.  Unfortunately they have been inactive for the
> last 3.5 years. :-(

Somebody else also discovered the problem and reported it upstream, but
did not receive a reply so far.

Cheers,
       Sven

Reply via email to