/* * @(#)finalize.h 1.19 97/02/21 * * Copyright (c) 1995, 1996 Sun Microsystems, Inc. All Rights Reserved. * * This software is the confidential and proprietary information of Sun * Microsystems, Inc. ("Confidential Information"). You shall not * disclose such Confidential Information and shall use it only in * accordance with the terms of the license agreement you entered into * with Sun. * * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING * THIS SOFTWARE OR ITS DERIVATIVES. * * CopyrightVersion 1.1_beta * */ #ifndef _FINALIZE_H_ #define _FINALIZE_H_ #include "oobj.h" #include "sys_api.h" /* * The HasFinalizerQ and FinalizeMeQ queues contain finalizer_t * structures. Handles rather than objects are used to avoid relocating * the contents of the queues on GC. */ typedef struct { JHandle *next; /* The next finalizer object */ } finalizer_t; extern JHandle *HasFinalizerQ; extern JHandle *FinalizeMeQ; extern JHandle *FinalizeMeQLast; extern JHandle *BeingFinalized; extern bool_t finalize_on_exit; #define FINALIZER_T(h) \ ((finalizer_t *)((char *)h->obj + cbInstanceSize(obj_classblock(h)))) /* * Locks for the finalization queues */ extern sys_mon_t *_hasfinalq_lock; #define HASFINALQ_LOCK_INIT() monitorRegister(_hasfinalq_lock, \ "Has finalization queue lock") #define HASFINALQ_LOCK() sysMonitorEnter(_hasfinalq_lock) #define HASFINALQ_LOCKED() sysMonitorEntered(_hasfinalq_lock) #define HASFINALQ_UNLOCK() sysMonitorExit(_hasfinalq_lock) #define HASFINALQ_NOTIFY() sysMonitorNotify(_hasfinalq_lock) extern sys_mon_t *_finalmeq_lock; #define FINALMEQ_LOCK_INIT() monitorRegister(_finalmeq_lock, \ "Finalize me queue lock") #define FINALMEQ_LOCK() sysMonitorEnter(_finalmeq_lock) #define FINALMEQ_LOCKED() sysMonitorEntered(_finalmeq_lock) #define FINALMEQ_UNLOCK() sysMonitorExit(_finalmeq_lock) #define FINALMEQ_NOTIFY() sysMonitorNotify(_finalmeq_lock) #define FINALMEQ_WAIT() sysMonitorWait(_finalmeq_lock, \ SYS_TIMEOUT_INFINITY, FALSE) extern void InitializeFinalizer(void); extern void InitializeFinalizerThread(void); extern void runFinalization(void); extern void finalizeOnExit(void); #endif /* _FINALIZE_H_ */