Beispiel #1
0
void
of_object_delete(of_object_t *obj)
{
    if (obj == NULL) {
        return;
    }

#if defined(OF_OBJECT_TRACKING)
    ASSERT(obj->track_info.magic == OF_OBJECT_TRACKING_MAGIC &&
           "of_object double free?");
    LOCI_LOG_TRACE("OF obj delete %p.  Wire buf %p.\n", obj,
                   obj->wire_object.wbuf);
    ASSERT(TRACK->count_current > 0);
    TRACK->count_current -= 1;
    TRACK->deletes += 1;

    TRACK_OBJS = biglist_remove_link_free(TRACK_OBJS,
                                          obj->track_info.bl_entry);
    obj->track_info.magic = 0;
#endif

    /*
     * Make callback if present
     */
    if (obj->track_info.delete_cb != NULL) {
        obj->track_info.delete_cb(obj);
    }

    if (obj->wire_object.owned) {
        of_wire_buffer_free(obj->wire_object.wbuf);
    }

    FREE(obj);
}
void
of_object_delete(of_object_t *obj)
{
    if (obj == NULL) {
        return;
    }

    if (obj->parent == NULL) {
        of_wire_buffer_free(obj->wbuf);
    }

    FREE(obj);
}