From 86e6aef6cb8176f24d0db96a1b8a9584652e3584 Mon Sep 17 00:00:00 2001
From: hofmockel <dreagonfly@gmx.de>
Date: Fri, 17 Jan 2014 20:06:17 +0100
Subject: [PATCH] Tag all the C++ functions with nogil and except+

---
 rocksdb/comparator.pxd     |  4 +--
 rocksdb/db.pxd             | 69 +++++++++++++++++++-------------------
 rocksdb/filter_policy.pxd  | 11 +++---
 rocksdb/iterator.pxd       | 18 +++++-----
 rocksdb/logger.pxd         |  2 +-
 rocksdb/merge_operator.pxd |  4 +--
 rocksdb/slice_.pxd         | 28 ++++++++--------
 rocksdb/status.pxd         | 18 +++++-----
 rocksdb/std_memory.pxd     | 10 +++---
 9 files changed, 82 insertions(+), 82 deletions(-)

diff --git a/rocksdb/comparator.pxd b/rocksdb/comparator.pxd
index c440a7b..4ff8b77 100644
--- a/rocksdb/comparator.pxd
+++ b/rocksdb/comparator.pxd
@@ -5,10 +5,10 @@ cdef extern from "rocksdb/comparator.h" namespace "rocksdb":
         const char* Name()
         int Compare(const Slice&, const Slice&) const
 
-    cdef extern const Comparator* BytewiseComparator()
+    cdef extern const Comparator* BytewiseComparator() nogil except +
 
 ctypedef int (*compare_func)(void*, const Slice&, const Slice&)
 
 cdef extern from "cpp/comparator_wrapper.hpp" namespace "py_rocks":
     cdef cppclass ComparatorWrapper:
-        ComparatorWrapper(string, void*, compare_func)
+        ComparatorWrapper(string, void*, compare_func) nogil except +
diff --git a/rocksdb/db.pxd b/rocksdb/db.pxd
index 18fd7de..11f8430 100644
--- a/rocksdb/db.pxd
+++ b/rocksdb/db.pxd
@@ -8,18 +8,17 @@ from slice_ cimport Slice
 from snapshot cimport Snapshot
 from iterator cimport Iterator
 
-# TODO: Move this to a separate .pxd file
 cdef extern from "rocksdb/write_batch.h" namespace "rocksdb":
     cdef cppclass WriteBatch:
-        WriteBatch() except +
-        WriteBatch(string) except +
-        void Put(const Slice&, const Slice&)
-        void Merge(const Slice&, const Slice&)
-        void Delete(const Slice&)
-        void PutLogData(const Slice&)
-        void Clear()
-        string Data()
-        int Count() const
+        WriteBatch() nogil except+
+        WriteBatch(string) nogil except+
+        void Put(const Slice&, const Slice&) nogil except+
+        void Merge(const Slice&, const Slice&) nogil except+
+        void Delete(const Slice&) nogil except+
+        void PutLogData(const Slice&) nogil except+
+        void Clear() nogil except+
+        string Data() nogil except+
+        int Count() nogil const
 
 cdef extern from "rocksdb/db.h" namespace "rocksdb":
     ctypedef uint64_t SequenceNumber
@@ -40,71 +39,71 @@ cdef extern from "rocksdb/db.h" namespace "rocksdb":
         Status Put(
             const options.WriteOptions&,
             const Slice&,
-            const Slice&)
+            const Slice&) nogil except+
 
         Status Delete(
             const options.WriteOptions&,
-            const Slice&)
+            const Slice&) nogil except+
 
         Status Merge(
             const options.WriteOptions&,
             const Slice&,
-            const Slice&)
+            const Slice&) nogil except+
 
         Status Write(
             const options.WriteOptions&,
-            WriteBatch*)
+            WriteBatch*) nogil except+
 
         Status Get(
             const options.ReadOptions&,
             const Slice&,
-            string*)
+            string*) nogil except+
 
         vector[Status] MultiGet(
             const options.ReadOptions&,
             const vector[Slice]&,
-            vector[string]*)
+            vector[string]*) nogil except+
 
         cpp_bool KeyMayExist(
             const options.ReadOptions&,
             Slice&,
             string*,
-            cpp_bool*)
+            cpp_bool*) nogil except+
 
         cpp_bool KeyMayExist(
             const options.ReadOptions&,
             Slice&,
-            string*)
+            string*) nogil except+
 
         Iterator* NewIterator(
-            const options.ReadOptions&)
+            const options.ReadOptions&) nogil except+
 
-        const Snapshot* GetSnapshot()
+        const Snapshot* GetSnapshot() nogil except+
 
-        void ReleaseSnapshot(const Snapshot*)
+        void ReleaseSnapshot(const Snapshot*) nogil except+
 
         cpp_bool GetProperty(
             const Slice&,
-            string*)
+            string*) nogil except+
 
         void GetApproximateSizes(
             const Range*
             int,
-            uint64_t*)
+            uint64_t*) nogil except+
 
         void CompactRange(
             const Slice*,
             const Slice*,
             bool,
-            int)
+            int) nogil except+
 
-        int NumberLevels()
-        int MaxMemCompactionLevel()
-        int Level0StopWriteTrigger()
-        const string& GetName() const
-        Status Flush(const options.FlushOptions&)
-        Status DisableFileDeletions()
-        Status EnableFileDeletions()
+        int NumberLevels() nogil except+
+        int MaxMemCompactionLevel() nogil except+
+        int Level0StopWriteTrigger() nogil except+
+        const string& GetName() nogil except+
+        Status Flush(const options.FlushOptions&) nogil except+
+        Status DisableFileDeletions() nogil except+
+        Status EnableFileDeletions() nogil except+
 
         # TODO: Status GetSortedWalFiles(VectorLogPtr& files)
         # TODO: SequenceNumber GetLatestSequenceNumber()
@@ -112,17 +111,17 @@ cdef extern from "rocksdb/db.h" namespace "rocksdb":
                   # SequenceNumber seq_number,
                   # unique_ptr[TransactionLogIterator]*)
 
-        Status DeleteFile(string)
-        void GetLiveFilesMetaData(vector[LiveFileMetaData]*)
+        Status DeleteFile(string) nogil except+
+        void GetLiveFilesMetaData(vector[LiveFileMetaData]*) nogil except+
 
 
     cdef Status DB_Open "rocksdb::DB::Open"(
         const options.Options&,
         const string&,
-        DB**)
+        DB**) nogil except+
 
     cdef Status DB_OpenForReadOnly "rocksdb::DB::OpenForReadOnly"(
         const options.Options&,
         const string&,
         DB**,
-        cpp_bool)
+        cpp_bool) nogil except+
diff --git a/rocksdb/filter_policy.pxd b/rocksdb/filter_policy.pxd
index c99510c..190fb56 100644
--- a/rocksdb/filter_policy.pxd
+++ b/rocksdb/filter_policy.pxd
@@ -1,14 +1,15 @@
 from libcpp cimport bool as cpp_bool
 from libcpp.string cimport string
+from libc.string cimport const_char
 from slice_ cimport Slice
 
 cdef extern from "rocksdb/filter_policy.h" namespace "rocksdb":
     cdef cppclass FilterPolicy:
-        void CreateFilter(const Slice*, int, string*) const
-        cpp_bool KeyMayMatch(const Slice&, const Slice&) const
-        const char* Name() const
+        void CreateFilter(const Slice*, int, string*) nogil except+
+        cpp_bool KeyMayMatch(const Slice&, const Slice&) nogil except+
+        const_char* Name() nogil except+
 
-    cdef extern const FilterPolicy* NewBloomFilterPolicy(int)
+    cdef extern const FilterPolicy* NewBloomFilterPolicy(int) nogil except+
 
 ctypedef void (*create_filter_func)(void*, const Slice*, int, string*)
 ctypedef cpp_bool (*key_may_match_func)(void*, const Slice&, const Slice&)
@@ -20,4 +21,4 @@ cdef extern from "cpp/filter_policy_wrapper.hpp" namespace "py_rocks":
             void*,
             void*,
             create_filter_func,
-            key_may_match_func)
+            key_may_match_func) nogil except+
diff --git a/rocksdb/iterator.pxd b/rocksdb/iterator.pxd
index b147a1c..5cfc24b 100644
--- a/rocksdb/iterator.pxd
+++ b/rocksdb/iterator.pxd
@@ -4,12 +4,12 @@ from status cimport Status
 
 cdef extern from "rocksdb/iterator.h" namespace "rocksdb":
     cdef cppclass Iterator:
-        cpp_bool Valid() const
-        void SeekToFirst()
-        void SeekToLast()
-        void Seek(const Slice&)
-        void Next()
-        void Prev()
-        Slice key() const
-        Slice value() const
-        Status status() const
+        cpp_bool Valid() nogil except+
+        void SeekToFirst() nogil except+
+        void SeekToLast() nogil except+
+        void Seek(const Slice&) nogil except+
+        void Next() nogil except+
+        void Prev() nogil except+
+        Slice key() nogil except+
+        Slice value() nogil except+
+        Status status() nogil except+
diff --git a/rocksdb/logger.pxd b/rocksdb/logger.pxd
index 6468d61..d0b7b72 100644
--- a/rocksdb/logger.pxd
+++ b/rocksdb/logger.pxd
@@ -2,4 +2,4 @@ cdef extern from "rocksdb/env.h" namespace "rocksdb":
     cdef cppclass Logger:
         pass
 
-    void Log(Logger*, const char*, ...)
+    void Log(Logger*, const char*, ...) nogil except+
diff --git a/rocksdb/merge_operator.pxd b/rocksdb/merge_operator.pxd
index fcbeabb..b8a95da 100644
--- a/rocksdb/merge_operator.pxd
+++ b/rocksdb/merge_operator.pxd
@@ -34,7 +34,7 @@ ctypedef cpp_bool (*partial_merge_func)(
 
 cdef extern from "cpp/merge_operator_wrapper.hpp" namespace "py_rocks":
     cdef cppclass AssociativeMergeOperatorWrapper:
-        AssociativeMergeOperatorWrapper(string, void*, merge_func)
+        AssociativeMergeOperatorWrapper(string, void*, merge_func) nogil except+
 
     cdef cppclass MergeOperatorWrapper:
         MergeOperatorWrapper(
@@ -42,4 +42,4 @@ cdef extern from "cpp/merge_operator_wrapper.hpp" namespace "py_rocks":
             void*,
             void*,
             full_merge_func,
-            partial_merge_func)
+            partial_merge_func) nogil except+
diff --git a/rocksdb/slice_.pxd b/rocksdb/slice_.pxd
index 9d8a3dd..6ee070c 100644
--- a/rocksdb/slice_.pxd
+++ b/rocksdb/slice_.pxd
@@ -3,18 +3,18 @@ from libcpp cimport bool as cpp_bool
 
 cdef extern from "rocksdb/slice.h" namespace "rocksdb":
     cdef cppclass Slice:
-        Slice()
-        Slice(const char*, size_t)
-        Slice(const string&)
-        Slice(const char*)
+        Slice() nogil
+        Slice(const char*, size_t) nogil
+        Slice(const string&) nogil
+        Slice(const char*) nogil
 
-        const char* data()
-        size_t size()
-        cpp_bool empty()
-        char operator[](int)
-        void clear()
-        void remove_prefix(size_t)
-        string ToString()
-        string ToString(cpp_bool)
-        int compare(const Slice&)
-        cpp_bool starts_with(const Slice&)
+        const char* data() nogil
+        size_t size() nogil
+        cpp_bool empty() nogil
+        char operator[](int) nogil
+        void clear() nogil
+        void remove_prefix(size_t) nogil
+        string ToString() nogil
+        string ToString(cpp_bool) nogil
+        int compare(const Slice&) nogil
+        cpp_bool starts_with(const Slice&) nogil
diff --git a/rocksdb/status.pxd b/rocksdb/status.pxd
index 9e60a21..f92bbf1 100644
--- a/rocksdb/status.pxd
+++ b/rocksdb/status.pxd
@@ -4,12 +4,12 @@ from libcpp.string cimport string
 cdef extern from "rocksdb/status.h" namespace "rocksdb":
     cdef cppclass Status:
         Status()
-        cpp_bool ok() const
-        cpp_bool IsNotFound() const
-        cpp_bool IsCorruption() const
-        cpp_bool IsNotSupported() const
-        cpp_bool IsInvalidArgument() const
-        cpp_bool IsIOError() const
-        cpp_bool IsMergeInProgress() const
-        cpp_bool IsIncomplete() const
-        string ToString() const
+        cpp_bool ok() nogil
+        cpp_bool IsNotFound() nogil const
+        cpp_bool IsCorruption() nogil const
+        cpp_bool IsNotSupported() nogil const
+        cpp_bool IsInvalidArgument() nogil const
+        cpp_bool IsIOError() nogil const
+        cpp_bool IsMergeInProgress() nogil const
+        cpp_bool IsIncomplete() nogil const
+        string ToString() nogil except+
diff --git a/rocksdb/std_memory.pxd b/rocksdb/std_memory.pxd
index 537e3e9..ea573ee 100644
--- a/rocksdb/std_memory.pxd
+++ b/rocksdb/std_memory.pxd
@@ -1,7 +1,7 @@
 cdef extern from "<memory>" namespace "std":
     cdef cppclass shared_ptr[T]:
-        shared_ptr()
-        shared_ptr(T*)
-        void reset()
-        void reset(T*)
-        T* get()
+        shared_ptr() nogil except+
+        shared_ptr(T*) nogil except+
+        void reset() nogil except+
+        void reset(T*) nogil except+
+        T* get() nogil except+
-- 
GitLab