oidvalue = *((unsigned int *)value);
goto transstart;
transstart:
- trans = transStart();
- ptr = transRead(trans, oidvalue);
- struct ___Thread___ *p = (struct ___Thread___ *) ptr;
- p->___threadDone___ = 1;
- *((unsigned int *)&((struct ___Object___ *) p)->___localcopy___) |=DIRTY;
- if(transCommit(trans) != 0) {
- goto transstart;
+ {
+ transrecord_t * trans = transStart();
+ ptr = transRead(trans, oidvalue);
+ struct ___Thread___ *p = (struct ___Thread___ *) ptr;
+ p->___threadDone___ = 1;
+ *((unsigned int *)&((struct ___Object___ *) p)->___localcopy___) |=DIRTY;
+ if(transCommit(trans) != 0) {
+ goto transstart;
+ }
}
#endif
pthread_exit(NULL);
}
versionarray[0] = version;
/* Request Notification */
+#ifdef PRECISE_GC
+ struct listitem *tmp=stopforgc((struct garbagelist *)___params___);
+#endif
reqNotify(oidarray, versionarray, 1);
+#ifdef PRECISE_GC
+ restartaftergc(tmp);
+#endif
free(oidarray);
free(versionarray);
transAbort(trans);
/* Add transaction to check if thread finished for join operation */
goto transstart;
transstart:
- trans = transStart();
- tmp = transRead(trans, (unsigned int) oid);
- ((struct ___Thread___ *)tmp)->___threadDone___ = 1;
- *((unsigned int *)&((struct ___Object___ *) tmp)->___localcopy___) |=DIRTY;
- if(transCommit(trans)!= 0) {
- goto transstart;
+ {
+ transrecord_t * trans = transStart();
+ tmp = transRead(trans, (unsigned int) oid);
+ ((struct ___Thread___ *)tmp)->___threadDone___ = 1;
+ *((unsigned int *)&((struct ___Object___ *) tmp)->___localcopy___) |=DIRTY;
+ if(transCommit(trans)!= 0) {
+ goto transstart;
+ }
}
pthread_exit(NULL);
}