If we return from here, nvl and cb hasn't been saved in a zevent_t. In this case, how does the caller know when to free nvl? Looking at call sites, it seemed that nvl would be freed in the cb callback, but since cb is not saved it appeared to me that cb would not be called. I'm new to the code, so I guess I must have missed something here.