This source file includes following definitions.
- rf_ShutdownCallback
- rf_ConfigureCallback
- rf_AllocCallbackDesc
- rf_FreeCallbackDesc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 #include "rf_types.h"
39 #include "rf_threadstuff.h"
40 #include "rf_callback.h"
41 #include "rf_debugMem.h"
42 #include "rf_freelist.h"
43 #include "rf_shutdown.h"
44
45 static RF_FreeList_t *rf_callback_freelist;
46
47 void rf_ShutdownCallback(void *);
48
49 #define RF_MAX_FREE_CALLBACK 64
50 #define RF_CALLBACK_INC 4
51 #define RF_CALLBACK_INITIAL 4
52
53 void
54 rf_ShutdownCallback(void *ignored)
55 {
56 RF_FREELIST_DESTROY(rf_callback_freelist, next, (RF_CallbackDesc_t *));
57 }
58
59 int
60 rf_ConfigureCallback(RF_ShutdownList_t **listp)
61 {
62 int rc;
63
64 RF_FREELIST_CREATE(rf_callback_freelist, RF_MAX_FREE_CALLBACK,
65 RF_CALLBACK_INC, sizeof(RF_CallbackDesc_t));
66 if (rf_callback_freelist == NULL)
67 return (ENOMEM);
68 rc = rf_ShutdownCreate(listp, rf_ShutdownCallback, NULL);
69 if (rc) {
70 RF_ERRORMSG3("Unable to add to shutdown list file %s line %d"
71 " rc=%d.\n", __FILE__, __LINE__, rc);
72 rf_ShutdownCallback(NULL);
73 return (rc);
74 }
75 RF_FREELIST_PRIME(rf_callback_freelist, RF_CALLBACK_INITIAL, next,
76 (RF_CallbackDesc_t *));
77 return (0);
78 }
79
80 RF_CallbackDesc_t *
81 rf_AllocCallbackDesc(void)
82 {
83 RF_CallbackDesc_t *p;
84
85 RF_FREELIST_GET(rf_callback_freelist, p, next, (RF_CallbackDesc_t *));
86 return (p);
87 }
88
89 void
90 rf_FreeCallbackDesc(RF_CallbackDesc_t *p)
91 {
92 RF_FREELIST_FREE(rf_callback_freelist, p, next);
93 }