#endif
while(1) {
if (VAR(___this___)->tid==0) {
+ VAR(___this___)->___prevlockobject___=NULL;
+ VAR(___this___)->___nextlockobject___=(struct ___Object___ *)pthread_getspecific(threadlocks);
+ VAR(___this___)->___nextlockobject___->___prevlockobject___=VAR(___this___);
+ pthread_setspecific(threadlocks, VAR(___this___));
VAR(___this___)->lockcount=1;
VAR(___this___)->tid=self;
pthread_mutex_unlock(&objlock);
pthread_t self=pthread_self();
if (self==VAR(___this___)->tid) {
VAR(___this___)->lockcount--;
- if (VAR(___this___)->lockcount==0)
+ if (VAR(___this___)->lockcount==0) {
+ if (VAR(___this___)->___prevlockobject___==NULL) {
+ pthread_setspecific(threadlocks, VAR(___this___)->___nextlockobject___);
+ } else
+ VAR(___this___)->___prevlockobject___->___nextlockobject___=VAR(___this___)->___nextlockobject___;
+ if (VAR(___this___)->___nextlockobject___!=NULL)
+ VAR(___this___)->___nextlockobject___->___prevlockobject___=VAR(___this___)->___prevlockobject___;
+ VAR(___this___)->lockentry=NULL;
VAR(___this___)->tid=0;
+ }
pthread_mutex_lock(&objlock);
pthread_cond_broadcast(&objcond);
pthread_mutex_unlock(&objlock);