Changeset 639:95a784729cac in freeDiameter for libfreeDiameter/sessions.c
- Timestamp:
- Dec 20, 2010, 1:07:06 PM (13 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libfreeDiameter/sessions.c
r557 r639 69 69 int eyec; /* An eye catcher also used to ensure the object is valid, must be SH_EYEC */ 70 70 int id; /* A unique integer to identify this handler */ 71 void (*cleanup)(session_state *, char *); /* The cleanup function to be called for cleaning a state */ 71 void (*cleanup)(session_state *, char *, void *); /* The cleanup function to be called for cleaning a state */ 72 void *opaque; /* a value that is passed as is to the cleanup callback */ 72 73 }; 73 74 … … 253 254 254 255 /* Create a new handler */ 255 int fd_sess_handler_create_internal ( struct session_handler ** handler, void (*cleanup)(session_state * state, char * sid ))256 int fd_sess_handler_create_internal ( struct session_handler ** handler, void (*cleanup)(session_state * state, char * sid, void * opaque), void * opaque ) 256 257 { 257 258 struct session_handler *new; … … 270 271 new->eyec = SH_EYEC; 271 272 new->cleanup = cleanup; 273 new->opaque = opaque; 272 274 273 275 *handler = new; … … 277 279 /* Destroy a handler, and all states attached to this handler. This operation is very slow but we don't care since it's rarely used. 278 280 * Note that it's better to call this function after all sessions have been deleted... */ 279 int fd_sess_handler_destroy ( struct session_handler ** handler )281 int fd_sess_handler_destroy ( struct session_handler ** handler, void ** opaque ) 280 282 { 281 283 struct session_handler * del; … … 323 325 struct state * st = (struct state *)(deleted_states.next->o); 324 326 TRACE_DEBUG(FULL, "Calling cleanup handler for session '%s' and data %p", st->sid, st->state); 325 (*del->cleanup)(st->state, st->sid );327 (*del->cleanup)(st->state, st->sid, del->opaque); 326 328 free(st->sid); 327 329 fd_list_unlink(&st->chain); 328 330 free(st); 329 331 } 332 333 if (opaque) 334 *opaque = del->opaque; 330 335 331 336 /* Free the handler */ … … 583 588 fd_list_unlink(&st->chain); 584 589 TRACE_DEBUG(FULL, "Calling handler %p cleanup for state registered with session '%s'", st->hdl, sess->sid); 585 (*st->hdl->cleanup)(st->state, sess->sid );590 (*st->hdl->cleanup)(st->state, sess->sid, st->hdl->opaque); 586 591 free(st); 587 592 } … … 805 810 fd_log_debug("\t %*s Invalid session handler object\n", level, ""); 806 811 } else { 807 fd_log_debug("\t %*s id %d, cleanup %p \n", level, "", handler->id, handler->cleanup);812 fd_log_debug("\t %*s id %d, cleanup %p, opaque %p\n", level, "", handler->id, handler->cleanup, handler->opaque); 808 813 } 809 814 fd_log_debug("\t %*s -- end of handler @%p --\n", level, "", handler);
Note: See TracChangeset
for help on using the changeset viewer.