2828struct 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) {
5353inline 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) {
6363struct Lock {
6464 os_unfair_lock_s lock;
6565 pthread_t owner;
66- int recursion_count;
66+ size_t recursion_count;
6767};
6868
6969inline 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}
7474inline void lock_destroy (Lock &) {}
@@ -86,31 +86,33 @@ inline void lock_acquire(Lock &lock) {
8686inline 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>
9697struct 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>
103104struct Lock {
104105 std::mutex lock;
105106 std::thread::id owner;
106- int recursion_count;
107+ size_t recursion_count;
107108};
108109#endif
109110
110111inline void lock_init (Lock &lock) {
111112 lock.owner = std::thread::id ();
112113 lock.recursion_count = 0 ;
113114}
115+
114116inline void lock_destroy (Lock &) {}
115117inline 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}
126128inline void lock_release (Lock &lock) {
0 commit comments