home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / inprise / JRUNTIME.Z / finalize.h < prev    next >
C/C++ Source or Header  |  1998-05-08  |  3KB  |  76 lines

  1. /*
  2.  * @(#)finalize.h    1.19 97/02/21
  3.  * 
  4.  * Copyright (c) 1995, 1996 Sun Microsystems, Inc. All Rights Reserved.
  5.  * 
  6.  * This software is the confidential and proprietary information of Sun
  7.  * Microsystems, Inc. ("Confidential Information").  You shall not
  8.  * disclose such Confidential Information and shall use it only in
  9.  * accordance with the terms of the license agreement you entered into
  10.  * with Sun.
  11.  * 
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  15.  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
  16.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  17.  * THIS SOFTWARE OR ITS DERIVATIVES.
  18.  * 
  19.  * CopyrightVersion 1.1_beta
  20.  * 
  21.  */
  22.  
  23. #ifndef _FINALIZE_H_
  24. #define _FINALIZE_H_
  25.  
  26. #include "oobj.h"
  27. #include "sys_api.h"
  28.  
  29. /*
  30.  * The HasFinalizerQ and FinalizeMeQ queues contain finalizer_t
  31.  * structures.  Handles rather than objects are used to avoid relocating
  32.  * the contents of the queues on GC.
  33.  */
  34. typedef struct {
  35.     JHandle *next;              /* The next finalizer object */
  36. } finalizer_t;
  37.  
  38. extern JHandle *HasFinalizerQ;
  39. extern JHandle *FinalizeMeQ;
  40. extern JHandle *FinalizeMeQLast;
  41. extern JHandle *BeingFinalized;
  42.  
  43. extern bool_t finalize_on_exit;
  44.  
  45. #define FINALIZER_T(h) \
  46.         ((finalizer_t *)((char *)h->obj + cbInstanceSize(obj_classblock(h))))
  47.  
  48. /*
  49.  * Locks for the finalization queues
  50.  */
  51. extern sys_mon_t *_hasfinalq_lock;
  52. #define HASFINALQ_LOCK_INIT()    monitorRegister(_hasfinalq_lock, \
  53.                         "Has finalization queue lock")
  54. #define HASFINALQ_LOCK()    sysMonitorEnter(_hasfinalq_lock)
  55. #define HASFINALQ_LOCKED()    sysMonitorEntered(_hasfinalq_lock)
  56. #define HASFINALQ_UNLOCK()    sysMonitorExit(_hasfinalq_lock)
  57. #define HASFINALQ_NOTIFY()    sysMonitorNotify(_hasfinalq_lock)
  58.  
  59. extern sys_mon_t *_finalmeq_lock;
  60. #define FINALMEQ_LOCK_INIT()    monitorRegister(_finalmeq_lock, \
  61.                         "Finalize me queue lock")
  62. #define FINALMEQ_LOCK()        sysMonitorEnter(_finalmeq_lock)
  63. #define FINALMEQ_LOCKED()    sysMonitorEntered(_finalmeq_lock)
  64. #define FINALMEQ_UNLOCK()    sysMonitorExit(_finalmeq_lock)
  65. #define FINALMEQ_NOTIFY()    sysMonitorNotify(_finalmeq_lock)
  66. #define FINALMEQ_WAIT()        sysMonitorWait(_finalmeq_lock, \
  67.                            SYS_TIMEOUT_INFINITY, FALSE)
  68.  
  69. extern void InitializeFinalizer(void);
  70. extern void InitializeFinalizerThread(void);
  71.  
  72. extern void runFinalization(void);
  73. extern void finalizeOnExit(void);
  74.  
  75. #endif /* _FINALIZE_H_ */
  76.