tasklet_t *tsk = calloc(1, sizeof(*tsk));
if (tsk) {
memoryinfo_alloc(&tasklet_memoryinfo, sizeof(*tsk));
- tsk->tsk_allocated = 1;
+ tsk->tsk_free = free;
tasklet_arm(tsk, callback, opaque);
}
return tsk;
TAILQ_REMOVE(&tasklets, tsk, tsk_link);
tsk->tsk_callback(tsk->tsk_opaque, 1);
tsk->tsk_callback = NULL;
- if (tsk->tsk_allocated)
- free(tsk);
+ if (tsk->tsk_free) tsk->tsk_free(tsk);
}
pthread_mutex_unlock(&tasklet_lock);
TAILQ_REMOVE(&tasklets, tsk, tsk_link);
tsk->tsk_callback(tsk->tsk_opaque, 1);
tsk->tsk_callback = NULL;
- if (tsk->tsk_allocated) {
+ if (tsk->tsk_free) {
memoryinfo_free(&tasklet_memoryinfo, sizeof(*tsk));
- free(tsk);
+ tsk->tsk_free(tsk);
}
}
tvh_cond_wait(&tasklet_cond, &tasklet_lock);
continue;
}
- /* the callback might re-initialize tasklet, save everythin */
+ /* the callback might re-initialize tasklet, save everything */
TAILQ_REMOVE(&tasklets, tsk, tsk_link);
tsk_cb = tsk->tsk_callback;
opaque = tsk->tsk_opaque;
tsk->tsk_callback = NULL;
- if (tsk->tsk_allocated) {
+ if (tsk->tsk_free) {
memoryinfo_free(&tasklet_memoryinfo, sizeof(*tsk));
- free(tsk);
+ tsk->tsk_free(tsk);
}
/* now, the callback can be safely called */
if (tsk_cb) {