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
|
_name_counter = 0
|
||||||
|
|
||||||
if islinux:
|
if islinux:
|
||||||
|
import fcntl
|
||||||
class LinuxListener(Listener):
|
class LinuxListener(Listener):
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
@ -94,6 +95,14 @@ if islinux:
|
|||||||
# multiprocessing tries to call unlink even on abstract
|
# multiprocessing tries to call unlink even on abstract
|
||||||
# named sockets, prevent it from doing so.
|
# named sockets, prevent it from doing so.
|
||||||
self._listener._unlink.cancel()
|
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):
|
def close(self):
|
||||||
# To ensure that the socket is released, we have to call
|
# To ensure that the socket is released, we have to call
|
||||||
|
Loading…
x
Reference in New Issue
Block a user