296 // _recursions == 0 _WaitSet == NULL
297 assert(((is_busy()|_recursions) == 0), "freeing inuse monitor");
298 _succ = NULL;
299 _EntryList = NULL;
300 _cxq = NULL;
301 _WaitSet = NULL;
302 _recursions = 0;
303 }
304
305 public:
306
307 void* object() const;
308 void* object_addr();
309 void set_object(void* obj);
310
311 bool check(TRAPS); // true if the thread owns the monitor.
312 void check_slow(TRAPS);
313 void clear();
314 static void sanity_checks(); // public for -XX:+ExecuteInternalVMTests
315 // in PRODUCT for -XX:SyncKnobs=Verbose=1
316 #ifndef PRODUCT
317 void verify();
318 void print();
319 #endif
320
321 void enter(TRAPS);
322 void exit(bool not_suspended, TRAPS);
323 void wait(jlong millis, bool interruptable, TRAPS);
324 void notify(TRAPS);
325 void notifyAll(TRAPS);
326
327 // Use the following at your own risk
328 intptr_t complete_exit(TRAPS);
329 void reenter(intptr_t recursions, TRAPS);
330
331 private:
332 void AddWaiter(ObjectWaiter * waiter);
333 static void DeferredInitialize();
334 void INotify(Thread * Self);
335 ObjectWaiter * DequeueWaiter();
336 void DequeueSpecificWaiter(ObjectWaiter * waiter);
337 void EnterI(TRAPS);
338 void ReenterI(Thread * Self, ObjectWaiter * SelfNode);
339 void UnlinkAfterAcquire(Thread * Self, ObjectWaiter * SelfNode);
|
296 // _recursions == 0 _WaitSet == NULL
297 assert(((is_busy()|_recursions) == 0), "freeing inuse monitor");
298 _succ = NULL;
299 _EntryList = NULL;
300 _cxq = NULL;
301 _WaitSet = NULL;
302 _recursions = 0;
303 }
304
305 public:
306
307 void* object() const;
308 void* object_addr();
309 void set_object(void* obj);
310
311 bool check(TRAPS); // true if the thread owns the monitor.
312 void check_slow(TRAPS);
313 void clear();
314 static void sanity_checks(); // public for -XX:+ExecuteInternalVMTests
315 // in PRODUCT for -XX:SyncKnobs=Verbose=1
316
317 void enter(TRAPS);
318 void exit(bool not_suspended, TRAPS);
319 void wait(jlong millis, bool interruptable, TRAPS);
320 void notify(TRAPS);
321 void notifyAll(TRAPS);
322
323 // Use the following at your own risk
324 intptr_t complete_exit(TRAPS);
325 void reenter(intptr_t recursions, TRAPS);
326
327 private:
328 void AddWaiter(ObjectWaiter * waiter);
329 static void DeferredInitialize();
330 void INotify(Thread * Self);
331 ObjectWaiter * DequeueWaiter();
332 void DequeueSpecificWaiter(ObjectWaiter * waiter);
333 void EnterI(TRAPS);
334 void ReenterI(Thread * Self, ObjectWaiter * SelfNode);
335 void UnlinkAfterAcquire(Thread * Self, ObjectWaiter * SelfNode);
|