Skip to content

Commit b2dd38a

Browse files
committed
lock.h: use -1 to indicate an invalid thread
1 parent 4693c83 commit b2dd38a

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

src/lock.h

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
struct Lock {
2929
pthread_spinlock_t lock;
3030
pthread_t owner;
31-
int recursion_count;
31+
size_t recursion_count;
3232
};
3333

3434
// Danger zone: the drjit-core locks are held for an extremely short amount of
@@ -53,7 +53,7 @@ inline void lock_acquire(Lock &lock) {
5353
inline void lock_release(Lock &lock) {
5454
lock.recursion_count--;
5555
if (lock.recursion_count == 0) {
56-
lock.owner = 0;
56+
lock.owner = (pthread_t) -1;
5757
pthread_spin_unlock(&lock.lock);
5858
}
5959
}
@@ -63,12 +63,12 @@ inline void lock_release(Lock &lock) {
6363
struct Lock {
6464
os_unfair_lock_s lock;
6565
pthread_t owner;
66-
int recursion_count;
66+
size_t recursion_count;
6767
};
6868

6969
inline void lock_init(Lock &lock) {
7070
lock.lock = OS_UNFAIR_LOCK_INIT;
71-
lock.owner = 0;
71+
lock.owner = (pthread_t) -1;
7272
lock.recursion_count = 0;
7373
}
7474
inline void lock_destroy(Lock &) {}
@@ -86,31 +86,33 @@ inline void lock_acquire(Lock &lock) {
8686
inline void lock_release(Lock &lock) {
8787
lock.recursion_count--;
8888
if (lock.recursion_count == 0) {
89-
lock.owner = 0;
89+
lock.owner = (pthread_t) -1;
9090
os_unfair_lock_unlock(&lock.lock);
9191
}
9292
}
9393
#else
94+
#include <thread>
9495
#if defined(_WIN32)
9596
#include <shared_mutex>
9697
struct Lock {
9798
std::shared_mutex lock; // Based on the faster Win7 SRWLOCK
9899
std::thread::id owner;
99-
int recursion_count;
100+
size_t recursion_count;
100101
};
101102
#else
102103
#include <mutex>
103104
struct Lock {
104105
std::mutex lock;
105106
std::thread::id owner;
106-
int recursion_count;
107+
size_t recursion_count;
107108
};
108109
#endif
109110

110111
inline void lock_init(Lock &lock) {
111112
lock.owner = std::thread::id();
112113
lock.recursion_count = 0;
113114
}
115+
114116
inline void lock_destroy(Lock &) {}
115117
inline void lock_acquire(Lock &lock) {
116118
std::thread::id self = std::this_thread::get_id();
@@ -120,7 +122,7 @@ inline void lock_acquire(Lock &lock) {
120122
}
121123

122124
lock.lock.lock();
123-
lock.owner = self;
125+
lock.owner = self;
124126
lock.recursion_count = 1;
125127
}
126128
inline void lock_release(Lock &lock) {

0 commit comments

Comments
 (0)