[Python-modules-commits] [python-llfuse] 01/11: Import python-llfuse_1.3.2+dfsg.orig.tar.gz

Nikolaus Rath nikratio-guest at moszumanska.debian.org
Mon Nov 13 12:52:47 UTC 2017


This is an automated email from the git hooks/post-receive script.

nikratio-guest pushed a commit to branch master
in repository python-llfuse.

commit 1921f2f34497ebd923bf57c3c5db71af7ce70668
Author: Nikolaus Rath <Nikolaus at rath.org>
Date:   Mon Nov 13 12:16:29 2017 +0000

    Import python-llfuse_1.3.2+dfsg.orig.tar.gz
---
 Changes.rst                      |   11 +
 Include/posix/stat.pxd           |   67 --
 Include/pthread.pxd              |    1 +
 PKG-INFO                         |  128 +--
 README.rst                       |    2 +-
 examples/lltest.py               |    8 +-
 examples/passthroughfs.py        |    8 +-
 examples/tmpfs.py                |    8 +-
 setup.py                         |   24 +-
 src/fuse_api.pxi                 |   44 +-
 src/llfuse.c                     | 2197 ++++++++++++++++++++++----------------
 src/llfuse.egg-info/PKG-INFO     |  128 +--
 src/llfuse.egg-info/SOURCES.txt  |    3 +-
 src/llfuse.egg-info/requires.txt |    1 +
 src/misc.pxi                     |   16 +-
 15 files changed, 1476 insertions(+), 1170 deletions(-)

diff --git a/Changes.rst b/Changes.rst
index ab2f765..af2ed8a 100644
--- a/Changes.rst
+++ b/Changes.rst
@@ -4,6 +4,17 @@
 
 .. currentmodule:: llfuse
 
+Release 1.3.2 (2017-11-13)
+==========================
+
+* Minor bugfixes.
+
+Release 1.3.1 (2017-09-22)
+==========================
+
+* The main loop now terminates properly again when terminated
+  by a signal.
+
 Release 1.3 (2017-09-15)
 ========================
 
diff --git a/Include/posix/stat.pxd b/Include/posix/stat.pxd
deleted file mode 100644
index 0d61be1..0000000
--- a/Include/posix/stat.pxd
+++ /dev/null
@@ -1,67 +0,0 @@
-from posix.types cimport (blkcnt_t, blksize_t, dev_t, gid_t, ino_t, mode_t,
-                          nlink_t, off_t, time_t, uid_t)
-
-
-cdef extern from "<sys/stat.h>" nogil:
-    cdef struct struct_stat "stat":
-        dev_t   st_dev
-        ino_t   st_ino
-        mode_t  st_mode
-        nlink_t st_nlink
-        uid_t   st_uid
-        gid_t   st_gid
-        dev_t   st_rdev
-        off_t   st_size
-        blksize_t st_blksize
-        blkcnt_t st_blocks
-        time_t  st_atime
-        time_t  st_mtime
-        time_t  st_ctime
-        time_t  st_birthtime
-
-# POSIX prescribes including both <sys/stat.h> and <unistd.h> for these
-cdef extern from "<unistd.h>" nogil:
-    int fchmod(int, mode_t)
-    int chmod(const char *, mode_t)
-
-    int fstat(int, struct_stat *)
-    int lstat(const char *, struct_stat *)
-    int stat(const char *, struct_stat *)
-
-    # Macros for st_mode
-    mode_t S_ISREG(mode_t)
-    mode_t S_ISDIR(mode_t)
-    mode_t S_ISCHR(mode_t)
-    mode_t S_ISBLK(mode_t)
-    mode_t S_ISFIFO(mode_t)
-    mode_t S_ISLNK(mode_t)
-    mode_t S_ISSOCK(mode_t)
-
-    mode_t S_IFMT
-    mode_t S_IFREG
-    mode_t S_IFDIR
-    mode_t S_IFCHR
-    mode_t S_IFBLK
-    mode_t S_IFIFO
-    mode_t S_IFLNK
-    mode_t S_IFSOCK
-
-    # Permissions
-    mode_t S_ISUID
-    mode_t S_ISGID
-    mode_t S_ISVTX
-
-    mode_t S_IRWXU
-    mode_t S_IRUSR
-    mode_t S_IWUSR
-    mode_t S_IXUSR
-
-    mode_t S_IRWXG
-    mode_t S_IRGRP
-    mode_t S_IWGRP
-    mode_t S_IXGRP
-
-    mode_t S_IRWXO
-    mode_t S_IROTH
-    mode_t S_IWOTH
-    mode_t S_IXOTH
diff --git a/Include/pthread.pxd b/Include/pthread.pxd
index 1656192..fead231 100644
--- a/Include/pthread.pxd
+++ b/Include/pthread.pxd
@@ -35,6 +35,7 @@ cdef extern from "<pthread.h>" nogil:
     int pthread_create(pthread_t *thread, pthread_attr_t *attr,
                        void *(*start_routine) (void *), void *arg)
     int pthread_join(pthread_t thread, void **retval)
+    int pthread_kill(pthread_t thread, int sig)
 
     int pthread_mutex_init(pthread_mutex_t *mutex, pthread_mutexattr_t *mutexattr)
     int pthread_mutex_lock(pthread_mutex_t *mutex)
diff --git a/PKG-INFO b/PKG-INFO
index abc6a51..c9dec44 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,75 +1,75 @@
 Metadata-Version: 1.1
 Name: llfuse
-Version: 1.3
+Version: 1.3.2
 Summary: Python bindings for the low-level FUSE API
 Home-page: https://bitbucket.org/nikratio/python-llfuse/
 Author: Nikolaus Rath
 Author-email: Nikolaus at rath.org
 License: LGPL
 Download-URL: https://bitbucket.org/nikratio/python-llfuse/downloads
-Description: ..
-          NOTE: We cannot use sophisticated ReST syntax (like
-          e.g. :file:`foo`) here because this isn't rendered correctly
-          by PyPi and/or BitBucket.
-        
-        The Python-LLFUSE Module
-        ========================
-        
-        .. start-intro
-        
-        Python-LLFUSE is a set of Python bindings for the low level FUSE_
-        API. It requires at least FUSE 2.8.0 and supports both Python 2.x and
-        3.x. Like FUSE itself, Python-LLFUSE is developed for Linux
-        systems. However, we try to maintain compatibility with OS-X, FreeBSD
-        and NetBSD as well (but due to lack of pre-release testers we can't
-        guarantee that every Python-LLFUSE release will run on these
-        platforms - please report any bugs and we will try to fix them).
-        
-        Python-LLFUSE releases can be downloaded from PyPi_. The documentation
-        can be `read online`__ and is also included in the ``doc/html``
-        directory of the Python-LLFUSE tarball.
-        
-        
-        Getting Help
-        ------------
-        
-        Please report any bugs on the `issue tracker`_. For discussion and
-        questions, please use the general `FUSE mailing list`_. A searchable
-        `mailing list archive`_ is kindly provided by Gmane_.
-        
-        
-        Development Status
-        ------------------
-        
-        The Python-LLFUSE API is not yet stable and may change from one
-        release to the other. Starting with version 0.42, Python-LLFUSE uses
-        semantic versioning. This means changes in the API will be reflected
-        in an increase of the major version number, i.e. the next
-        backwards-incompatible version will be 1.0. Projects designed for
-        e.g. version 0.42.1 of Python-LLFUSE are thus recommended to declare a
-        dependency on ``llfuse >= 0.42.1, < 1.0``.
-        
-        
-        Professional Support
-        --------------------
-        
-        Professional support is available. Please contact Nikolaus Rath
-        <Nikolaus at rath.org> for details.
-        
-        Contributing
-        ------------
-        
-        The Python-LLFUSE source code is available both on GitHub_ and BitBucket_.
-        
-        .. __: http://pythonhosted.org/llfuse/
-        .. _FUSE: http://github.com/libfuse/libfuse
-        .. _FUSE mailing list: https://lists.sourceforge.net/lists/listinfo/fuse-devel
-        .. _issue tracker: https://bitbucket.org/nikratio/python-llfuse/issues
-        .. _mailing list archive: http://dir.gmane.org/gmane.comp.file-systems.fuse.devel
-        .. _Gmane: http://www.gmane.org/
-        .. _PyPi: https://pypi.python.org/pypi/llfuse/
-        .. _BitBucket: https://bitbucket.org/nikratio/python-llfuse/
-        .. _GitHub: https://github.com/python-llfuse/python-llfuse
+Description: ..
+          NOTE: We cannot use sophisticated ReST syntax (like
+          e.g. :file:`foo`) here because this isn't rendered correctly
+          by PyPi and/or BitBucket.
+        
+        The Python-LLFUSE Module
+        ========================
+        
+        .. start-intro
+        
+        Python-LLFUSE is a set of Python bindings for the low level FUSE_
+        API. It requires at least FUSE 2.8.0 and supports both Python 2.x and
+        3.x. Like FUSE itself, Python-LLFUSE is developed for Linux
+        systems. However, we try to maintain compatibility with OS-X, FreeBSD
+        and NetBSD as well (but due to lack of pre-release testers we can't
+        guarantee that every Python-LLFUSE release will run on these
+        platforms - please report any bugs and we will try to fix them).
+        
+        Python-LLFUSE releases can be downloaded from PyPi_. The documentation
+        can be `read online`__ and is also included in the ``doc/html``
+        directory of the Python-LLFUSE tarball.
+        
+        
+        Getting Help
+        ------------
+        
+        Please report any bugs on the `issue tracker`_. For discussion and
+        questions, please use the general `FUSE mailing list`_. A searchable
+        `mailing list archive`_ is kindly provided by Gmane_.
+        
+        
+        Development Status
+        ------------------
+        
+        The Python-LLFUSE API is not yet stable and may change from one
+        release to the other. Starting with version 0.42, Python-LLFUSE uses
+        semantic versioning. This means changes in the API will be reflected
+        in an increase of the major version number, i.e. the next
+        backwards-incompatible version will be 1.0. Projects designed for
+        e.g. version 0.42.1 of Python-LLFUSE are thus recommended to declare a
+        dependency on ``llfuse >= 0.42.1, < 1.0``.
+        
+        
+        Professional Support
+        --------------------
+        
+        Professional support is available. Please contact Nikolaus Rath
+        <Nikolaus at rath.org> for details.
+        
+        Contributing
+        ------------
+        
+        The Python-LLFUSE source code is available both on GitHub_ and BitBucket_.
+        
+        .. __: http://www.rath.org/llfuse-docs/
+        .. _FUSE: http://github.com/libfuse/libfuse
+        .. _FUSE mailing list: https://lists.sourceforge.net/lists/listinfo/fuse-devel
+        .. _issue tracker: https://bitbucket.org/nikratio/python-llfuse/issues
+        .. _mailing list archive: http://dir.gmane.org/gmane.comp.file-systems.fuse.devel
+        .. _Gmane: http://www.gmane.org/
+        .. _PyPi: https://pypi.python.org/pypi/llfuse/
+        .. _BitBucket: https://bitbucket.org/nikratio/python-llfuse/
+        .. _GitHub: https://github.com/python-llfuse/python-llfuse
         
 Keywords: FUSE,python
 Platform: Linux
diff --git a/README.rst b/README.rst
index a7a30b1..1aac425 100644
--- a/README.rst
+++ b/README.rst
@@ -52,7 +52,7 @@ Contributing
 
 The Python-LLFUSE source code is available both on GitHub_ and BitBucket_.
 
-.. __: http://pythonhosted.org/llfuse/
+.. __: http://www.rath.org/llfuse-docs/
 .. _FUSE: http://github.com/libfuse/libfuse
 .. _FUSE mailing list: https://lists.sourceforge.net/lists/listinfo/fuse-devel
 .. _issue tracker: https://bitbucket.org/nikratio/python-llfuse/issues
diff --git a/examples/lltest.py b/examples/lltest.py
index e359496..44bc53c 100755
--- a/examples/lltest.py
+++ b/examples/lltest.py
@@ -28,12 +28,12 @@ from __future__ import division, print_function, absolute_import
 import os
 import sys
 
-# We are running from the Python-LLFUSE source directory, put it
-# into the Python path.
+# If we are running from the Python-LLFUSE source directory, try
+# to load the module from there first.
 basedir = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), '..'))
 if (os.path.exists(os.path.join(basedir, 'setup.py')) and
-    os.path.exists(os.path.join(basedir, 'src', 'llfuse'))):
-    sys.path.append(os.path.join(basedir, 'src'))
+    os.path.exists(os.path.join(basedir, 'src', 'llfuse.pyx'))):
+    sys.path.insert(0, os.path.join(basedir, 'src'))
 
 from argparse import ArgumentParser
 import stat
diff --git a/examples/passthroughfs.py b/examples/passthroughfs.py
index 774c177..ef45030 100755
--- a/examples/passthroughfs.py
+++ b/examples/passthroughfs.py
@@ -44,12 +44,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 import os
 import sys
 
-# We are running from the Python-LLFUSE source directory, put it
-# into the Python path.
+# If we are running from the Python-LLFUSE source directory, try
+# to load the module from there first.
 basedir = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), '..'))
 if (os.path.exists(os.path.join(basedir, 'setup.py')) and
-    os.path.exists(os.path.join(basedir, 'src', 'llfuse'))):
-    sys.path.append(os.path.join(basedir, 'src'))
+    os.path.exists(os.path.join(basedir, 'src', 'llfuse.pyx'))):
+    sys.path.insert(0, os.path.join(basedir, 'src'))
 
 import llfuse
 from argparse import ArgumentParser
diff --git a/examples/tmpfs.py b/examples/tmpfs.py
index d3345a9..0ff052b 100755
--- a/examples/tmpfs.py
+++ b/examples/tmpfs.py
@@ -27,12 +27,12 @@ from __future__ import division, print_function, absolute_import
 import os
 import sys
 
-# We are running from the Python-LLFUSE source directory, put it
-# into the Python path.
+# If we are running from the Python-LLFUSE source directory, try
+# to load the module from there first.
 basedir = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), '..'))
 if (os.path.exists(os.path.join(basedir, 'setup.py')) and
-    os.path.exists(os.path.join(basedir, 'src', 'llfuse'))):
-    sys.path.append(os.path.join(basedir, 'src'))
+    os.path.exists(os.path.join(basedir, 'src', 'llfuse.pyx'))):
+    sys.path.insert(0, os.path.join(basedir, 'src'))
 
 import llfuse
 import errno
diff --git a/setup.py b/setup.py
index b7f1ca3..194c37a 100755
--- a/setup.py
+++ b/setup.py
@@ -59,7 +59,7 @@ if DEVELOPER_MODE:
 # to work properly
 sys.path.insert(0, os.path.join(basedir, 'src'))
 
-LLFUSE_VERSION = '1.3'
+LLFUSE_VERSION = '1.3.2'
 
 def main():
 
@@ -80,6 +80,10 @@ def main():
     # We may have unused functions if we compile for older FUSE versions
     compile_args.append('-Wno-unused-function')
 
+    # Nothing wrong with that if you know what you are doing
+    # (which Cython does)
+    compile_args.append('-Wno-implicit-fallthrough')
+
     # Due to platform specific conditions, these are unavoidable
     compile_args.append('-Wno-unused-parameter')
 
@@ -151,7 +155,8 @@ def main():
           ext_modules=[Extension('llfuse', c_sources,
                                   extra_compile_args=compile_args,
                                   extra_link_args=link_args)],
-          cmdclass={'build_cython': build_cython },
+        cmdclass={'upload_docs': upload_docs,
+                  'build_cython': build_cython },
           command_options={
             'build_sphinx': {
                 'version': ('setup.py', LLFUSE_VERSION),
@@ -192,6 +197,21 @@ def pkg_config(pkg, cflags=True, ldflags=False, min_ver=None):
     return cflags.decode('us-ascii').split()
 
 
+class upload_docs(setuptools.Command):
+    user_options = []
+    boolean_options = []
+    description = "Upload documentation"
+
+    def initialize_options(self):
+        pass
+
+    def finalize_options(self):
+        pass
+
+    def run(self):
+        subprocess.check_call(['rsync', '-aHv', '--del', os.path.join(basedir, 'doc', 'html') + '/',
+                               'ebox.rath.org:/srv/www.rath.org/llfuse-docs/'])
+
 class build_cython(setuptools.Command):
     user_options = []
     boolean_options = []
diff --git a/src/fuse_api.pxi b/src/fuse_api.pxi
index f93365f..62060c6 100644
--- a/src/fuse_api.pxi
+++ b/src/fuse_api.pxi
@@ -213,8 +213,13 @@ def getxattr(path, name, size_t size_guess=128, namespace='user'):
 #   active, it's expected to improve performance because we move pages from the
 #   page instead of copying them.
 #
-default_options = frozenset(('big_writes', 'nonempty', 'default_permissions',
-                             'no_splice_read', 'splice_write', 'splice_move'))
+if os.uname()[0] == 'Darwin':
+    default_options = frozenset(('big_writes', 'default_permissions',
+                                 'no_splice_read', 'splice_write', 'splice_move'))
+else:
+    default_options = frozenset(('big_writes', 'nonempty', 'default_permissions',
+                                 'no_splice_read', 'splice_write', 'splice_move'))
+
 def init(ops, mountpoint, options=default_options):
     '''Initialize and mount FUSE file system
 
@@ -283,11 +288,11 @@ def main(workers=None):
     have terminated when `main` returns.
 
     While this function is running, special signal handlers will be installed
-    for the *SIGTERM*, *SIGINT* (Ctrl-C), *SIGHUP* and *SIGPIPE*
+    for the *SIGTERM*, *SIGINT* (Ctrl-C), *SIGHUP*, *SIGUSR1* and *SIGPIPE*
     signals. *SIGPIPE* will be ignored, while the other three signals will cause
     request processing to stop and the function to return.  *SIGINT* (Ctrl-C)
     will thus *not* result in a `KeyboardInterrupt` exception while this
-    function is runnnig.
+    function is runnning.
 
     When the function returns because the file system has received an unmount
     request it will return `None`. If it returns because it has received a
@@ -372,9 +377,7 @@ cdef session_loop(void* mem, size_t size):
         buf.pos = 0
         buf.flags = 0
         with nogil:
-            pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
             res = fuse_session_receive_buf(session, &buf, &ch)
-            pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
 
         if res == -errno.EINTR:
             continue
@@ -454,8 +457,7 @@ cdef session_loop_mt(workers):
             wd[i].bufsize = bufsize
             wd[i].buf = calloc_or_raise(1, bufsize)
 
-            # Disable signal reception in new thread
-            # (FUSE does the same, probably for a good reason)
+            # Ensure that signals get delivered to main thread
             pthread_sigmask(SIG_BLOCK, &newset, &oldset)
             res = pthread_create(&wd[i].thread_id, NULL, &worker_start, wd+i)
             pthread_sigmask(SIG_SETMASK, &oldset, NULL)
@@ -471,6 +473,10 @@ cdef session_loop_mt(workers):
     finally:
         for i in range(workers):
             if wd[i].started:
+                res = pthread_kill(wd[i].thread_id, signal.SIGUSR1)
+                # Thread may have terminated already
+                if res != 0 and res != errno.ESRCH:
+                    log.error('pthread_kill failed with: %s', strerror(res))
                 with nogil:
                     res = pthread_join(wd[i].thread_id, NULL)
                 if res != 0:
@@ -483,12 +489,22 @@ cdef session_loop_mt(workers):
 
 
 def close(unmount=True):
-    '''Unmount file system and clean up
-
-    If *unmount* is False, only clean up operations are peformed, but
-    the file system is not unmounted. As long as the file system
-    process is still running, all requests will hang. Once the process
-    has terminated, these (and all future) requests fail with ESHUTDOWN.
+    '''Clean up and ensure filesystem is unmounted
+
+    If *unmount* is False, only clean up operations are peformed, but the file
+    system is not explicitly unmounted.
+
+    Normally, the filesystem is unmounted by the user calling umount(8) or
+    fusermount(1), which then terminates the FUSE main loop. However, the loop
+    may also terminate as a result of an exception or a signal. In this case the
+    filesystem remains mounted, but any attempt to access it will block (while
+    the filesystem process is still running) or (after the filesystem process
+    has terminated) return an error. If *unmount* is True, this function will
+    ensure that the filesystem is properly unmounted.
+
+    Note: if the connection to the kernel is terminated via the
+    ``/sys/fs/fuse/connections/`` interface, this function will *not* unmount
+    the filesystem even if *unmount* is True.
     '''
 
     global mountpoint_b
diff --git a/src/llfuse.c b/src/llfuse.c
index 08dadbf..4ba8aaf 100644
--- a/src/llfuse.c
+++ b/src/llfuse.c
@@ -674,7 +674,7 @@ typedef void (*__pyx_t_4libc_6signal_sighandler_t)(int);
 struct __pyx_t_6llfuse_worker_data_t;
 typedef struct __pyx_t_6llfuse_worker_data_t __pyx_t_6llfuse_worker_data_t;
 
-/* "src/fuse_api.pxi":389
+/* "src/fuse_api.pxi":392
  *         fuse_session_process_buf(session, &buf, ch)
  * 
  * ctypedef struct worker_data_t:             # <<<<<<<<<<<<<<
@@ -1350,6 +1350,9 @@ static void __Pyx_AddTraceback(const char *funcname, int c_line,
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
 
 /* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
+
+/* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_fuse_ino_t(fuse_ino_t value);
 
 /* CIntToPy.proto */
@@ -1371,9 +1374,6 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_off_t(off_t value);
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint32_t(uint32_t value);
 
 /* CIntToPy.proto */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
-
-/* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uid_t(uid_t value);
 
 /* CIntToPy.proto */
@@ -1556,7 +1556,7 @@ static PyObject *__pyx_v_6llfuse_exc_info = 0;
 static int __pyx_v_6llfuse_exit_reason;
 static pthread_mutex_t __pyx_v_6llfuse_exc_info_mutex;
 static PyObject *__pyx_v_6llfuse__notify_queue = 0;
-static struct sigaction __pyx_v_6llfuse_sa_backup[4];
+static struct sigaction __pyx_v_6llfuse_sa_backup[5];
 static void __pyx_f_6llfuse_fuse_init(void *, struct fuse_conn_info *); /*proto*/
 static void __pyx_f_6llfuse_fuse_destroy(void *); /*proto*/
 static void __pyx_f_6llfuse_fuse_lookup(fuse_req_t, fuse_ino_t, const char *); /*proto*/
@@ -1601,6 +1601,7 @@ static PyObject *__pyx_f_6llfuse_bytes2str(PyObject *); /*proto*/
 static PyObject *__pyx_f_6llfuse_strerror(int); /*proto*/
 static PyObject *__pyx_f_6llfuse_PyBytes_from_bufvec(struct fuse_bufvec *); /*proto*/
 static void __pyx_f_6llfuse_signal_handler(int, siginfo_t *, void *); /*proto*/
+static void __pyx_f_6llfuse_do_nothing(int, siginfo_t *, void *); /*proto*/
 static int __pyx_f_6llfuse_sigaction_p(int, struct sigaction *, struct sigaction *); /*proto*/
 static PyObject *__pyx_f_6llfuse_set_signal_handlers(void); /*proto*/
 static PyObject *__pyx_f_6llfuse_restore_signal_handlers(void); /*proto*/
@@ -1699,8 +1700,10 @@ static const char __pyx_k_split[] = "split";
 static const char __pyx_k_start[] = "start";
 static const char __pyx_k_str_t[] = "str_t";
 static const char __pyx_k_strip[] = "strip";
+static const char __pyx_k_uname[] = "uname";
 static const char __pyx_k_value[] = "value";
 static const char __pyx_k_write[] = "write";
+static const char __pyx_k_Darwin[] = "Darwin";
 static const char __pyx_k_Groups[] = "Groups:";
 static const char __pyx_k_Thread[] = "Thread";
 static const char __pyx_k_access[] = "access";
@@ -1905,6 +1908,7 @@ static const char __pyx_k_Calling_fuse_session_loop[] = "Calling fuse_session_lo
 static const char __pyx_k_fuse_buf_copy_failed_with[] = "fuse_buf_copy failed with ";
 static const char __pyx_k_pthread_create_failed_with[] = "pthread_create failed with ";
 static const char __pyx_k_pthread_join_failed_with_s[] = "pthread_join failed with: %s";
+static const char __pyx_k_pthread_kill_failed_with_s[] = "pthread_kill failed with: %s";
 static const char __pyx_k_Calling_fuse_session_destroy[] = "Calling fuse_session_destroy";
 static const char __pyx_k_Calling_fuse_session_add_chan[] = "Calling fuse_session_add_chan";
 static const char __pyx_k_Need_to_call_init_before_main[] = "Need to call init() before main()";
@@ -1979,6 +1983,7 @@ static PyObject *__pyx_kp_u_Calling_fuse_session_destroy;
 static PyObject *__pyx_kp_u_Calling_fuse_session_loop;
 static PyObject *__pyx_kp_u_Calling_fuse_session_remove_chan;
 static PyObject *__pyx_kp_u_Calling_fuse_unmount;
+static PyObject *__pyx_n_u_Darwin;
 static PyObject *__pyx_n_u_ENOATTR;
 static PyObject *__pyx_kp_u_Exception_after_kill;
 static PyObject *__pyx_n_s_ExitStack;
@@ -2244,6 +2249,7 @@ static PyObject *__pyx_n_s_prepare;
 static PyObject *__pyx_kp_u_proc_d_status;
 static PyObject *__pyx_kp_u_pthread_create_failed_with;
 static PyObject *__pyx_kp_u_pthread_join_failed_with_s;
+static PyObject *__pyx_kp_u_pthread_kill_failed_with_s;
 static PyObject *__pyx_kp_u_pthread_mutex_lock_failed_with_s;
 static PyObject *__pyx_kp_u_pthread_mutex_ulock_failed_with;
 static PyObject *__pyx_n_s_put;
@@ -2308,6 +2314,7 @@ static PyObject *__pyx_n_s_threading;
 static PyObject *__pyx_n_s_timeout;
 static PyObject *__pyx_n_s_tmp;
 static PyObject *__pyx_n_s_traceback;
+static PyObject *__pyx_n_s_uname;
 static PyObject *__pyx_kp_u_unknown_flag_s_o;
 static PyObject *__pyx_n_s_unlink;
 static PyObject *__pyx_n_s_unmount;
@@ -2586,12 +2593,13 @@ static PyObject *__pyx_tuple__154;
 static PyObject *__pyx_tuple__156;
 static PyObject *__pyx_tuple__158;
 static PyObject *__pyx_tuple__159;
-static PyObject *__pyx_tuple__161;
-static PyObject *__pyx_tuple__163;
-static PyObject *__pyx_tuple__165;
-static PyObject *__pyx_tuple__167;
-static PyObject *__pyx_tuple__171;
-static PyObject *__pyx_tuple__173;
+static PyObject *__pyx_tuple__160;
+static PyObject *__pyx_tuple__162;
+static PyObject *__pyx_tuple__164;
+static PyObject *__pyx_tuple__166;
+static PyObject *__pyx_tuple__168;
+static PyObject *__pyx_tuple__172;
+static PyObject *__pyx_tuple__174;
 static PyObject *__pyx_codeobj__87;
 static PyObject *__pyx_codeobj__89;
 static PyObject *__pyx_codeobj__91;
@@ -2628,15 +2636,15 @@ static PyObject *__pyx_codeobj__151;
 static PyObject *__pyx_codeobj__153;
 static PyObject *__pyx_codeobj__155;
 static PyObject *__pyx_codeobj__157;
-static PyObject *__pyx_codeobj__160;
-static PyObject *__pyx_codeobj__162;
-static PyObject *__pyx_codeobj__164;
-static PyObject *__pyx_codeobj__166;
-static PyObject *__pyx_codeobj__168;
+static PyObject *__pyx_codeobj__161;
+static PyObject *__pyx_codeobj__163;
+static PyObject *__pyx_codeobj__165;
+static PyObject *__pyx_codeobj__167;
 static PyObject *__pyx_codeobj__169;
 static PyObject *__pyx_codeobj__170;
-static PyObject *__pyx_codeobj__172;
-static PyObject *__pyx_codeobj__174;
+static PyObject *__pyx_codeobj__171;
+static PyObject *__pyx_codeobj__173;
+static PyObject *__pyx_codeobj__175;
 
 /* "src/operations.pxi":28
  *     '''
@@ -35482,7 +35490,7 @@ static void __pyx_f_6llfuse_signal_handler(int __pyx_v_sig, CYTHON_UNUSED siginf
  *         fuse_session_exit(session)
  *     exit_reason = sig             # <<<<<<<<<<<<<<
  * 
- * cdef int sigaction_p(int sig, sigaction_t *sa,
+ * cdef void do_nothing(int sig, siginfo_t *si, void* ctx) nogil:
  */
   __pyx_v_6llfuse_exit_reason = __pyx_v_sig;
 
@@ -35500,6 +35508,19 @@ static void __pyx_f_6llfuse_signal_handler(int __pyx_v_sig, CYTHON_UNUSED siginf
 /* "src/misc.pxi":702
  *     exit_reason = sig
  * 
+ * cdef void do_nothing(int sig, siginfo_t *si, void* ctx) nogil:             # <<<<<<<<<<<<<<
+ *     pass
+ * 
+ */
+
+static void __pyx_f_6llfuse_do_nothing(CYTHON_UNUSED int __pyx_v_sig, CYTHON_UNUSED siginfo_t *__pyx_v_si, CYTHON_UNUSED void *__pyx_v_ctx) {
+
+  /* function exit code */
+}
+
+/* "src/misc.pxi":705
+ *     pass
+ * 
  * cdef int sigaction_p(int sig, sigaction_t *sa,             # <<<<<<<<<<<<<<
  *                      sigaction_t *old_sa) except -1:
  *     cdef int res
@@ -35515,7 +35536,7 @@ static int __pyx_f_6llfuse_sigaction_p(int __pyx_v_sig, struct sigaction *__pyx_
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("sigaction_p", 0);
 
-  /* "src/misc.pxi":705
+  /* "src/misc.pxi":708
  *                      sigaction_t *old_sa) except -1:
  *     cdef int res
  *     res = sigaction(sig, sa, old_sa)             # <<<<<<<<<<<<<<
@@ -35524,7 +35545,7 @@ static int __pyx_f_6llfuse_sigaction_p(int __pyx_v_sig, struct sigaction *__pyx_
  */
   __pyx_v_res = sigaction(__pyx_v_sig, __pyx_v_sa, __pyx_v_old_sa);
 
-  /* "src/misc.pxi":706
+  /* "src/misc.pxi":709
  *     cdef int res
  *     res = sigaction(sig, sa, old_sa)
  *     if res != 0:             # <<<<<<<<<<<<<<
@@ -35534,37 +35555,37 @@ static int __pyx_f_6llfuse_sigaction_p(int __pyx_v_sig, struct sigaction *__pyx_
   __pyx_t_1 = ((__pyx_v_res != 0) != 0);
   if (__pyx_t_1) {
 
-    /* "src/misc.pxi":707
+    /* "src/misc.pxi":710
  *     res = sigaction(sig, sa, old_sa)
  *     if res != 0:
  *         raise OSError(errno.errno, 'sigaction failed with '             # <<<<<<<<<<<<<<
  *                       + strerror(errno.errno))
  *     return 0
  */
-    __pyx_t_2 = __Pyx_PyInt_From_int(errno); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 707, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyInt_From_int(errno); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 710, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
 
-    /* "src/misc.pxi":708
+    /* "src/misc.pxi":711
  *     if res != 0:
  *         raise OSError(errno.errno, 'sigaction failed with '
  *                       + strerror(errno.errno))             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-    __pyx_t_3 = __pyx_f_6llfuse_strerror(errno); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 708, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_6llfuse_strerror(errno); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 711, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PyNumber_Add(__pyx_kp_u_sigaction_failed_with, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 708, __pyx_L1_error)
+    __pyx_t_4 = PyNumber_Add(__pyx_kp_u_sigaction_failed_with, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 711, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "src/misc.pxi":707
+    /* "src/misc.pxi":710
  *     res = sigaction(sig, sa, old_sa)
  *     if res != 0:
  *         raise OSError(errno.errno, 'sigaction failed with '             # <<<<<<<<<<<<<<
  *                       + strerror(errno.errno))
  *     return 0
  */
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 707, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 710, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
@@ -35572,14 +35593,14 @@ static int __pyx_f_6llfuse_sigaction_p(int __pyx_v_sig, struct sigaction *__pyx_
     PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4);
     __pyx_t_2 = 0;
     __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_OSError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 707, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_OSError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 710, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __PYX_ERR(2, 707, __pyx_L1_error)
+    __PYX_ERR(2, 710, __pyx_L1_error)
 
-    /* "src/misc.pxi":706
+    /* "src/misc.pxi":709
  *     cdef int res
  *     res = sigaction(sig, sa, old_sa)
  *     if res != 0:             # <<<<<<<<<<<<<<
@@ -35588,18 +35609,18 @@ static int __pyx_f_6llfuse_sigaction_p(int __pyx_v_sig, struct sigaction *__pyx_
  */
   }
 
-  /* "src/misc.pxi":709
+  /* "src/misc.pxi":712
  *         raise OSError(errno.errno, 'sigaction failed with '
  *                       + strerror(errno.errno))
  *     return 0             # <<<<<<<<<<<<<<
  * 
- * cdef sigaction_t sa_backup[4]
+ * cdef sigaction_t sa_backup[5]
  */
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "src/misc.pxi":702
- *     exit_reason = sig
+  /* "src/misc.pxi":705
+ *     pass
  * 
  * cdef int sigaction_p(int sig, sigaction_t *sa,             # <<<<<<<<<<<<<<
  *                      sigaction_t *old_sa) except -1:
@@ -35618,9 +35639,9 @@ static int __pyx_f_6llfuse_sigaction_p(int __pyx_v_sig, struct sigaction *__pyx_
   return __pyx_r;
 }
 
-/* "src/misc.pxi":712
+/* "src/misc.pxi":715
  * 
- * cdef sigaction_t sa_backup[4]
+ * cdef sigaction_t sa_backup[5]
  * cdef set_signal_handlers():             # <<<<<<<<<<<<<<
  *     cdef sigaction_t sa
  * 
@@ -35633,7 +35654,7 @@ static PyObject *__pyx_f_6llfuse_set_signal_handlers(void) {
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("set_signal_handlers", 0);
 
-  /* "src/misc.pxi":715
+  /* "src/misc.pxi":718
  *     cdef sigaction_t sa
  * 
  *     sigemptyset(&sa.sa_mask)             # <<<<<<<<<<<<<<
@@ -35642,7 +35663,7 @@ static PyObject *__pyx_f_6llfuse_set_signal_handlers(void) {
  */
   sigemptyset((&__pyx_v_sa.sa_mask));
 
-  /* "src/misc.pxi":716
+  /* "src/misc.pxi":719
  * 
  *     sigemptyset(&sa.sa_mask)
  *     sa.sa_sigaction = &signal_handler             # <<<<<<<<<<<<<<
@@ -35651,7 +35672,7 @@ static PyObject *__pyx_f_6llfuse_set_signal_handlers(void) {
  */
   __pyx_v_sa.sa_sigaction = (&__pyx_f_6llfuse_signal_handler);
 
-  /* "src/misc.pxi":717
+  /* "src/misc.pxi":720
  *     sigemptyset(&sa.sa_mask)
  *     sa.sa_sigaction = &signal_handler
  *     sa.sa_flags = SA_SIGINFO             # <<<<<<<<<<<<<<
@@ -35660,63 +35681,90 @@ static PyObject *__pyx_f_6llfuse_set_signal_handlers(void) {
  */
   __pyx_v_sa.sa_flags = SA_SIGINFO;
 
-  /* "src/misc.pxi":718
+  /* "src/misc.pxi":721
  *     sa.sa_sigaction = &signal_handler
  *     sa.sa_flags = SA_SIGINFO
  *     sigaction_p(signal.SIGTERM, &sa, &sa_backup[0])             # <<<<<<<<<<<<<<
  *     sigaction_p(signal.SIGINT, &sa, &sa_backup[1])
  *     sigaction_p(signal.SIGHUP, &sa, &sa_backup[2])
  */
-  __pyx_t_1 = __pyx_f_6llfuse_sigaction_p(SIGTERM, (&__pyx_v_sa), (&(__pyx_v_6llfuse_sa_backup[0]))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(2, 718, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_6llfuse_sigaction_p(SIGTERM, (&__pyx_v_sa), (&(__pyx_v_6llfuse_sa_backup[0]))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(2, 721, __pyx_L1_error)
 
-  /* "src/misc.pxi":719
+  /* "src/misc.pxi":722
  *     sa.sa_flags = SA_SIGINFO
  *     sigaction_p(signal.SIGTERM, &sa, &sa_backup[0])
  *     sigaction_p(signal.SIGINT, &sa, &sa_backup[1])             # <<<<<<<<<<<<<<
  *     sigaction_p(signal.SIGHUP, &sa, &sa_backup[2])
  * 
  */
-  __pyx_t_1 = __pyx_f_6llfuse_sigaction_p(SIGINT, (&__pyx_v_sa), (&(__pyx_v_6llfuse_sa_backup[1]))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(2, 719, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_6llfuse_sigaction_p(SIGINT, (&__pyx_v_sa), (&(__pyx_v_6llfuse_sa_backup[1]))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(2, 722, __pyx_L1_error)
 
-  /* "src/misc.pxi":720
+  /* "src/misc.pxi":723
  *     sigaction_p(signal.SIGTERM, &sa, &sa_backup[0])
  *     sigaction_p(signal.SIGINT, &sa, &sa_backup[1])
  *     sigaction_p(signal.SIGHUP, &sa, &sa_backup[2])             # <<<<<<<<<<<<<<
  * 
+ *     # This is used to interrupt system calls without
+ */
+  __pyx_t_1 = __pyx_f_6llfuse_sigaction_p(SIGHUP, (&__pyx_v_sa), (&(__pyx_v_6llfuse_sa_backup[2]))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(2, 723, __pyx_L1_error)
+
+  /* "src/misc.pxi":727
+ *     # This is used to interrupt system calls without
+ *     # doing anything else.
+ *     sa.sa_sigaction = &do_nothing             # <<<<<<<<<<<<<<
+ *     sa.sa_flags = SA_SIGINFO
+ *     sigaction_p(signal.SIGUSR1, &sa, &sa_backup[3])
+ */
+  __pyx_v_sa.sa_sigaction = (&__pyx_f_6llfuse_do_nothing);
+
+  /* "src/misc.pxi":728
+ *     # doing anything else.
+ *     sa.sa_sigaction = &do_nothing
+ *     sa.sa_flags = SA_SIGINFO             # <<<<<<<<<<<<<<
+ *     sigaction_p(signal.SIGUSR1, &sa, &sa_backup[3])
+ * 
+ */
+  __pyx_v_sa.sa_flags = SA_SIGINFO;
+
+  /* "src/misc.pxi":729
+ *     sa.sa_sigaction = &do_nothing
+ *     sa.sa_flags = SA_SIGINFO
+ *     sigaction_p(signal.SIGUSR1, &sa, &sa_backup[3])             # <<<<<<<<<<<<<<
+ * 
  *     sa.sa_handler = signal.SIG_IGN
  */
-  __pyx_t_1 = __pyx_f_6llfuse_sigaction_p(SIGHUP, (&__pyx_v_sa), (&(__pyx_v_6llfuse_sa_backup[2]))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(2, 720, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_6llfuse_sigaction_p(SIGUSR1, (&__pyx_v_sa), (&(__pyx_v_6llfuse_sa_backup[3]))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(2, 729, __pyx_L1_error)
 
-  /* "src/misc.pxi":722
- *     sigaction_p(signal.SIGHUP, &sa, &sa_backup[2])
+  /* "src/misc.pxi":731
+ *     sigaction_p(signal.SIGUSR1, &sa, &sa_backup[3])
  * 
  *     sa.sa_handler = signal.SIG_IGN             # <<<<<<<<<<<<<<
  *     sa.sa_flags = 0
- *     sigaction_p(signal.SIGPIPE, &sa, &sa_backup[3])
+ *     sigaction_p(signal.SIGPIPE, &sa, &sa_backup[4])
  */
   __pyx_v_sa.sa_handler = SIG_IGN;
 
-  /* "src/misc.pxi":723
+  /* "src/misc.pxi":732
  * 
  *     sa.sa_handler = signal.SIG_IGN
  *     sa.sa_flags = 0             # <<<<<<<<<<<<<<
- *     sigaction_p(signal.SIGPIPE, &sa, &sa_backup[3])
+ *     sigaction_p(signal.SIGPIPE, &sa, &sa_backup[4])
  * 
  */
   __pyx_v_sa.sa_flags = 0;
 
-  /* "src/misc.pxi":724
+  /* "src/misc.pxi":733
  *     sa.sa_handler = signal.SIG_IGN
  *     sa.sa_flags = 0
- *     sigaction_p(signal.SIGPIPE, &sa, &sa_backup[3])             # <<<<<<<<<<<<<<
+ *     sigaction_p(signal.SIGPIPE, &sa, &sa_backup[4])             # <<<<<<<<<<<<<<
  * 
  * cdef restore_signal_handlers():
  */
-  __pyx_t_1 = __pyx_f_6llfuse_sigaction_p(SIGPIPE, (&__pyx_v_sa), (&(__pyx_v_6llfuse_sa_backup[3]))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(2, 724, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_6llfuse_sigaction_p(SIGPIPE, (&__pyx_v_sa), (&(__pyx_v_6llfuse_sa_backup[4]))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(2, 733, __pyx_L1_error)
 
-  /* "src/misc.pxi":712
+  /* "src/misc.pxi":715
  * 
- * cdef sigaction_t sa_backup[4]
+ * cdef sigaction_t sa_backup[5]
  * cdef set_signal_handlers():             # <<<<<<<<<<<<<<
  *     cdef sigaction_t sa
  * 
@@ -35734,8 +35782,8 @@ static PyObject *__pyx_f_6llfuse_set_signal_handlers(void) {
   return __pyx_r;
 }
 
-/* "src/misc.pxi":726
- *     sigaction_p(signal.SIGPIPE, &sa, &sa_backup[3])
+/* "src/misc.pxi":735
+ *     sigaction_p(signal.SIGPIPE, &sa, &sa_backup[4])
  * 
  * cdef restore_signal_handlers():             # <<<<<<<<<<<<<<
  *     sigaction_p(signal.SIGTERM, &sa_backup[0], NULL)
@@ -35748,44 +35796,53 @@ static PyObject *__pyx_f_6llfuse_restore_signal_handlers(void) {
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("restore_signal_handlers", 0);
 
-  /* "src/misc.pxi":727
+  /* "src/misc.pxi":736
  * 
  * cdef restore_signal_handlers():
  *     sigaction_p(signal.SIGTERM, &sa_backup[0], NULL)             # <<<<<<<<<<<<<<
  *     sigaction_p(signal.SIGINT, &sa_backup[1], NULL)
  *     sigaction_p(signal.SIGHUP, &sa_backup[2], NULL)
  */
-  __pyx_t_1 = __pyx_f_6llfuse_sigaction_p(SIGTERM, (&(__pyx_v_6llfuse_sa_backup[0])), NULL); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(2, 727, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_6llfuse_sigaction_p(SIGTERM, (&(__pyx_v_6llfuse_sa_backup[0])), NULL); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(2, 736, __pyx_L1_error)
 
-  /* "src/misc.pxi":728
+  /* "src/misc.pxi":737
  * cdef restore_signal_handlers():
  *     sigaction_p(signal.SIGTERM, &sa_backup[0], NULL)
  *     sigaction_p(signal.SIGINT, &sa_backup[1], NULL)             # <<<<<<<<<<<<<<
  *     sigaction_p(signal.SIGHUP, &sa_backup[2], NULL)
- *     sigaction_p(signal.SIGPIPE, &sa_backup[3], NULL)
+ *     sigaction_p(signal.SIGUSR1, &sa_backup[3], NULL)
  */
-  __pyx_t_1 = __pyx_f_6llfuse_sigaction_p(SIGINT, (&(__pyx_v_6llfuse_sa_backup[1])), NULL); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(2, 728, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_6llfuse_sigaction_p(SIGINT, (&(__pyx_v_6llfuse_sa_backup[1])), NULL); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(2, 737, __pyx_L1_error)
 
-  /* "src/misc.pxi":729
+  /* "src/misc.pxi":738
  *     sigaction_p(signal.SIGTERM, &sa_backup[0], NULL)
  *     sigaction_p(signal.SIGINT, &sa_backup[1], NULL)
  *     sigaction_p(signal.SIGHUP, &sa_backup[2], NULL)             # <<<<<<<<<<<<<<
- *     sigaction_p(signal.SIGPIPE, &sa_backup[3], NULL)
- * 
+ *     sigaction_p(signal.SIGUSR1, &sa_backup[3], NULL)
+ *     sigaction_p(signal.SIGPIPE, &sa_backup[4], NULL)
  */
-  __pyx_t_1 = __pyx_f_6llfuse_sigaction_p(SIGHUP, (&(__pyx_v_6llfuse_sa_backup[2])), NULL); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(2, 729, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_6llfuse_sigaction_p(SIGHUP, (&(__pyx_v_6llfuse_sa_backup[2])), NULL); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(2, 738, __pyx_L1_error)
 
-  /* "src/misc.pxi":730
+  /* "src/misc.pxi":739
  *     sigaction_p(signal.SIGINT, &sa_backup[1], NULL)
  *     sigaction_p(signal.SIGHUP, &sa_backup[2], NULL)
- *     sigaction_p(signal.SIGPIPE, &sa_backup[3], NULL)             # <<<<<<<<<<<<<<
+ *     sigaction_p(signal.SIGUSR1, &sa_backup[3], NULL)             # <<<<<<<<<<<<<<
+ *     sigaction_p(signal.SIGPIPE, &sa_backup[4], NULL)
+ * 
+ */
+  __pyx_t_1 = __pyx_f_6llfuse_sigaction_p(SIGUSR1, (&(__pyx_v_6llfuse_sa_backup[3])), NULL); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(2, 739, __pyx_L1_error)
+
+  /* "src/misc.pxi":740
+ *     sigaction_p(signal.SIGHUP, &sa_backup[2], NULL)
+ *     sigaction_p(signal.SIGUSR1, &sa_backup[3], NULL)
+ *     sigaction_p(signal.SIGPIPE, &sa_backup[4], NULL)             # <<<<<<<<<<<<<<
  * 
  * cdef void* calloc_or_raise(size_t nmemb, size_t size) except NULL:
  */
-  __pyx_t_1 = __pyx_f_6llfuse_sigaction_p(SIGPIPE, (&(__pyx_v_6llfuse_sa_backup[3])), NULL); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(2, 730, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_6llfuse_sigaction_p(SIGPIPE, (&(__pyx_v_6llfuse_sa_backup[4])), NULL); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(2, 740, __pyx_L1_error)
 
-  /* "src/misc.pxi":726
- *     sigaction_p(signal.SIGPIPE, &sa, &sa_backup[3])
+  /* "src/misc.pxi":735
+ *     sigaction_p(signal.SIGPIPE, &sa, &sa_backup[4])
  * 
  * cdef restore_signal_handlers():             # <<<<<<<<<<<<<<
  *     sigaction_p(signal.SIGTERM, &sa_backup[0], NULL)
@@ -35804,8 +35861,8 @@ static PyObject *__pyx_f_6llfuse_restore_signal_handlers(void) {
   return __pyx_r;
 }
 
-/* "src/misc.pxi":732
- *     sigaction_p(signal.SIGPIPE, &sa_backup[3], NULL)
... 5571 lines suppressed ...

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/python-llfuse.git



More information about the Python-modules-commits mailing list