/* util.c */
#define MEM(x) if (!(x)) { ERROR("Out of memory"); exit(1); }
void (*reset_signal(int signo, void (*func)(int)))(int);
-int request_opaque_free(REQUEST *request);
int rad_mkdir(char *directory, mode_t mode);
void *rad_malloc(size_t size); /* calls exit(1) on error! */
void rad_const_free(void const *ptr);
}
/*
- * Free a request.
- */
-int request_opaque_free(REQUEST *request)
-{
- talloc_free(request);
-
- return 0;
-}
-
-/*
* Create possibly many directories.
*
* Note that the input directory name is NOT a constant!
PTHREAD_MUTEX_LOCK(&(inst->handler_mutex));
handler = talloc_zero(inst, eap_handler_t);
-
if (inst->handler_tree) {
- rbtree_insert(inst->handler_tree, handler);
+ if (!rbtree_insert(inst->handler_tree, handler)) {
+ ERROR("Failed inserting EAP handler into handler tree");
+ talloc_free(handler);
+ return NULL;
+ }
}
handler->inst_holder = inst;
-
PTHREAD_MUTEX_UNLOCK(&(inst->handler_mutex));
+
+ /* Doesn't need to be inside the critical region */
talloc_set_destructor(handler, _eap_handler_free);
return handler;
int trips;
} check_handler_t;
-static int check_opaque_free(check_handler_t *check)
+static int _check_opaque_free(check_handler_t *check)
{
bool do_warning = false;
uint8_t state[8];
check->handler = handler;
check->trips = handler->trips;
- talloc_set_destructor(check, check_opaque_free);
+ talloc_set_destructor(check, _check_opaque_free);
request_data_add(request, inst, 0, check, true);
}
* So we associate the fake request with
* this request.
*/
- talloc_set_destructor(fake, request_opaque_free);
rcode = request_data_add(request, request->proxy,
REQUEST_DATA_EAP_MSCHAP_TUNNEL_CALLBACK,
fake, true);
* So we associate the fake request with
* this request.
*/
- talloc_set_destructor(fake, request_opaque_free);
code = request_data_add(request, request->proxy, REQUEST_DATA_EAP_MSCHAP_TUNNEL_CALLBACK,
fake, true);
rad_assert(code == 0);