Changeset e6fc486 in mainline for uspace/srv/devman/drv_conn.c


Ignore:
Timestamp:
2018-11-22T16:55:28Z (5 years ago)
Author:
Jakub Jermar <jakub@…>
Parents:
21d3201
Message:

Fix devman function reference counting

After commit 498ced18a4, create_fun_node() returns a fun pointer with an
implicit reference. Adding an extra reference for creation thus adds a
reference that will never be dropped and the function object will be
leaked.

This commit fixes the reference counting issue and also adds the missing
check to the call to insert_fun_node().

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/devman/drv_conn.c

    r21d3201 re6fc486  
    284284
    285285        fun_node_t *fun = create_fun_node();
    286         /* One reference for creation, one for us */
    287         fun_add_ref(fun);
     286        /*
     287         * Hold a temporary reference while we work with fun. The reference from
     288         * create_fun_node() moves to the device tree.
     289         */
    288290        fun_add_ref(fun);
    289291        fun->ftype = ftype;
     
    300302                fun_busy_unlock(fun);
    301303                fun_del_ref(fun);
    302                 delete_fun_node(fun);
     304                fun_del_ref(fun);       /* fun is destroyed */
    303305                async_answer_0(call, ENOMEM);
    304306                return;
Note: See TracChangeset for help on using the changeset viewer.