mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-08-11 09:13:57 -04:00
Linux build: Fix regression that caused opening PDF files (or any externally viewed files) preventing calibre from being restarted as long as the external viewer is not shutdown. Fixes #1326453 [Calibre will not reopen once closed if pdf files have been opened through calibre and left open](https://bugs.launchpad.net/calibre/+bug/1326453)
This commit is contained in:
parent
d71557bc53
commit
83110cb730
@ -87,6 +87,7 @@ class CriticalError(Exception):
|
||||
_name_counter = 0
|
||||
|
||||
if islinux:
|
||||
import fcntl
|
||||
class LinuxListener(Listener):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
@ -94,6 +95,14 @@ if islinux:
|
||||
# multiprocessing tries to call unlink even on abstract
|
||||
# named sockets, prevent it from doing so.
|
||||
self._listener._unlink.cancel()
|
||||
# Prevent child processes from inheriting this socket
|
||||
# If we dont do this child processes not created by calibre, will
|
||||
# inherit this socket, preventing the calibre GUI from being restarted.
|
||||
# Examples of such processes are external viewers launched by Qt
|
||||
# using openUrl().
|
||||
fd = self._listener._socket.fileno()
|
||||
old_flags = fcntl.fcntl(fd, fcntl.F_GETFD)
|
||||
fcntl.fcntl(fd, fcntl.F_SETFD, old_flags | fcntl.FD_CLOEXEC)
|
||||
|
||||
def close(self):
|
||||
# To ensure that the socket is released, we have to call
|
||||
|
Loading…
x
Reference in New Issue
Block a user