/** * Notifies one thread waiting on the monitor. * * Only single thread waiting on the * object's monitor is waked up. * Nothing happens if no threads are waiting on the monitor. * * @param[in] mon_ptr monitor */ IDATA VMCALL jthread_raw_monitor_notify(jrawMonitorID mon_ptr) { hythread_monitor_t monitor = (hythread_monitor_t)array_get(jvmti_monitor_table, (UDATA)mon_ptr); if (!monitor) { return TM_ERROR_INVALID_MONITOR; } return hythread_monitor_notify(monitor); } // jthread_raw_monitor_notify
/** * Signals a single thread that is blocking on the given monitor to wake up. * * @param[in] lockword_ptr monitor addr */ IDATA hythread_thin_monitor_notify(hythread_thin_monitor_t *lockword_ptr) { hythread_monitor_t fat_monitor; hythread_thin_monitor_t lockword = *lockword_ptr; if (IS_FAT_LOCK(lockword)) { fat_monitor = locktable_get_fat_monitor(FAT_LOCK_ID(lockword)); assert(fat_monitor); return hythread_monitor_notify(fat_monitor); } // check if the current thread owns lock if (!hythread_owns_thin_lock(tm_self_tls, lockword)) { return TM_ERROR_ILLEGAL_STATE; } return TM_ERROR_NONE; }