kobject_create_and_add 创建了多少引用计数?
How many reference counts does kobject_create_and_add create?
根据 LDD3,kobject_init
和 kobject_add
都会增加引用计数。所以 kobject_create_and_add
应该创建一个有 2 个引用的对象。对吗?
但是在linux/sample/kobject/kobject-example.c
中,模块kobject_create_and_add
一个对象,但是只放一次,退出的时候。这意味着只有一个引用计数。怎么了?
So kobject_create_and_add
should create an object with 2 references. Right?
不是真的。它创建一个对象(应将其引用计数器设置为 1
),然后将其添加到 parent 对象(应递增 parent 对象的引用计数器)。涉及两个不同的对象,处理两个不同的引用计数器。
调用kobject_put()
减少对象的引用计数器,当新的引用计数器值相应地测试时,在对象内部调用kobject_release()
。后者调用 kobject_cleanup()
,后者又在 parent 对象上调用 kobject_put()
,从而也处理其引用计数器。
根据 LDD3,kobject_init
和 kobject_add
都会增加引用计数。所以 kobject_create_and_add
应该创建一个有 2 个引用的对象。对吗?
但是在linux/sample/kobject/kobject-example.c
中,模块kobject_create_and_add
一个对象,但是只放一次,退出的时候。这意味着只有一个引用计数。怎么了?
So
kobject_create_and_add
should create an object with 2 references. Right?
不是真的。它创建一个对象(应将其引用计数器设置为 1
),然后将其添加到 parent 对象(应递增 parent 对象的引用计数器)。涉及两个不同的对象,处理两个不同的引用计数器。
调用kobject_put()
减少对象的引用计数器,当新的引用计数器值相应地测试时,在对象内部调用kobject_release()
。后者调用 kobject_cleanup()
,后者又在 parent 对象上调用 kobject_put()
,从而也处理其引用计数器。