29
29
#include "kvsroot.h"
30
30
31
31
struct kvsroot_mgr {
32
- zhash_t * roothash ;
32
+ zhashx_t * roothash ;
33
33
zlist_t * removelist ;
34
34
bool iterating_roots ;
35
35
flux_t * h ;
36
36
void * arg ;
37
37
};
38
38
39
+ static void kvsroot_destroy (void * * data );
40
+
39
41
kvsroot_mgr_t * kvsroot_mgr_create (flux_t * h , void * arg )
40
42
{
41
43
kvsroot_mgr_t * krm = NULL ;
42
44
43
45
if (!(krm = calloc (1 , sizeof (* krm ))))
44
46
goto error ;
45
- if (!(krm -> roothash = zhash_new ())) {
47
+ if (!(krm -> roothash = zhashx_new ())) {
46
48
errno = ENOMEM ;
47
49
goto error ;
48
50
}
51
+ zhashx_set_destructor (krm -> roothash , kvsroot_destroy );
49
52
if (!(krm -> removelist = zlist_new ())) {
50
53
errno = ENOMEM ;
51
54
goto error ;
@@ -65,7 +68,7 @@ void kvsroot_mgr_destroy (kvsroot_mgr_t *krm)
65
68
if (krm ) {
66
69
int save_errno = errno ;
67
70
if (krm -> roothash )
68
- zhash_destroy (& krm -> roothash );
71
+ zhashx_destroy (& krm -> roothash );
69
72
if (krm -> removelist )
70
73
zlist_destroy (& krm -> removelist );
71
74
free (krm );
@@ -75,13 +78,14 @@ void kvsroot_mgr_destroy (kvsroot_mgr_t *krm)
75
78
76
79
int kvsroot_mgr_root_count (kvsroot_mgr_t * krm )
77
80
{
78
- return zhash_size (krm -> roothash );
81
+ return zhashx_size (krm -> roothash );
79
82
}
80
83
81
- static void kvsroot_destroy (void * data )
84
+ /* zhashx_destructor_fn */
85
+ static void kvsroot_destroy (void * * data )
82
86
{
83
87
if (data ) {
84
- struct kvsroot * root = data ;
88
+ struct kvsroot * root = * data ;
85
89
int save_errno = errno ;
86
90
if (root -> ns_name )
87
91
free (root -> ns_name );
@@ -93,7 +97,7 @@ static void kvsroot_destroy (void *data)
93
97
zlist_destroy (& root -> wait_version_list );
94
98
if (root -> setroot_queue )
95
99
flux_msglist_destroy (root -> setroot_queue );
96
- free (data );
100
+ free (root );
97
101
errno = save_errno ;
98
102
}
99
103
}
@@ -105,6 +109,8 @@ static void flux_msg_decref_wrapper (void **item)
105
109
flux_msg_decref (msg );
106
110
}
107
111
112
+ /* zhashx_destructor_fn */
113
+
108
114
struct kvsroot * kvsroot_mgr_create_root (kvsroot_mgr_t * krm ,
109
115
struct cache * cache ,
110
116
const char * hash_name ,
@@ -113,7 +119,6 @@ struct kvsroot *kvsroot_mgr_create_root (kvsroot_mgr_t *krm,
113
119
int flags )
114
120
{
115
121
struct kvsroot * root ;
116
- int save_errnum ;
117
122
118
123
/* Don't modify hash while iterating */
119
124
if (krm -> iterating_roots ) {
@@ -163,25 +168,17 @@ struct kvsroot *kvsroot_mgr_create_root (kvsroot_mgr_t *krm,
163
168
root -> flags = flags ;
164
169
root -> remove = false;
165
170
166
- if (zhash_insert (krm -> roothash , ns , root ) < 0 ) {
171
+ if (zhashx_insert (krm -> roothash , ns , root ) < 0 ) {
167
172
errno = EEXIST ;
168
- flux_log_error (krm -> h , "zhash_insert" );
169
- goto error ;
170
- }
171
-
172
- if (!zhash_freefn (krm -> roothash , ns , kvsroot_destroy )) {
173
- flux_log_error (krm -> h , "zhash_freefn" );
174
- save_errnum = errno ;
175
- zhash_delete (krm -> roothash , ns );
176
- errno = save_errnum ;
173
+ flux_log_error (krm -> h , "zhashx_insert" );
177
174
goto error ;
178
175
}
179
176
180
177
list_node_init (& root -> work_queue_node );
181
178
return root ;
182
179
183
180
error :
184
- kvsroot_destroy (root );
181
+ kvsroot_destroy (( void * * ) & root );
185
182
return NULL ;
186
183
}
187
184
@@ -204,14 +201,14 @@ int kvsroot_mgr_remove_root (kvsroot_mgr_t *krm, const char *ns)
204
201
}
205
202
}
206
203
else
207
- zhash_delete (krm -> roothash , ns );
204
+ zhashx_delete (krm -> roothash , ns );
208
205
return 0 ;
209
206
}
210
207
211
208
struct kvsroot * kvsroot_mgr_lookup_root (kvsroot_mgr_t * krm ,
212
209
const char * ns )
213
210
{
214
- return zhash_lookup (krm -> roothash , ns );
211
+ return zhashx_lookup (krm -> roothash , ns );
215
212
}
216
213
217
214
struct kvsroot * kvsroot_mgr_lookup_root_safe (kvsroot_mgr_t * krm ,
@@ -233,7 +230,7 @@ int kvsroot_mgr_iter_roots (kvsroot_mgr_t *krm, kvsroot_root_f cb, void *arg)
233
230
234
231
krm -> iterating_roots = true;
235
232
236
- root = zhash_first (krm -> roothash );
233
+ root = zhashx_first (krm -> roothash );
237
234
while (root ) {
238
235
int ret ;
239
236
@@ -243,7 +240,7 @@ int kvsroot_mgr_iter_roots (kvsroot_mgr_t *krm, kvsroot_root_f cb, void *arg)
243
240
if (ret == 1 )
244
241
break ;
245
242
246
- root = zhash_next (krm -> roothash );
243
+ root = zhashx_next (krm -> roothash );
247
244
}
248
245
249
246
krm -> iterating_roots = false;
0 commit comments