1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-10-19 02:29:40 +00:00

Shuffle netgraph mutexes a bit and hold a reference on a node

from the function that is calling the destructor.
This commit is contained in:
Julian Elischer 2001-02-28 18:49:09 +00:00
parent 1d9153d7ad
commit a96dcd84d2
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=73238
4 changed files with 10 additions and 8 deletions

View File

@ -920,6 +920,8 @@ static char *spin_order_list[] = {
#ifdef __i386__
"cy",
#endif
"ng_node",
"ng_worklist",
"ithread table lock",
"ithread list lock",
"sched lock",
@ -930,8 +932,6 @@ static char *spin_order_list[] = {
/*
* leaf locks
*/
"ng_node",
"ng_worklist",
#ifdef SMP
#ifdef __i386__
"ap boot",

View File

@ -920,6 +920,8 @@ static char *spin_order_list[] = {
#ifdef __i386__
"cy",
#endif
"ng_node",
"ng_worklist",
"ithread table lock",
"ithread list lock",
"sched lock",
@ -930,8 +932,6 @@ static char *spin_order_list[] = {
/*
* leaf locks
*/
"ng_node",
"ng_worklist",
#ifdef SMP
#ifdef __i386__
"ap boot",

View File

@ -920,6 +920,8 @@ static char *spin_order_list[] = {
#ifdef __i386__
"cy",
#endif
"ng_node",
"ng_worklist",
"ithread table lock",
"ithread list lock",
"sched lock",
@ -930,8 +932,6 @@ static char *spin_order_list[] = {
/*
* leaf locks
*/
"ng_node",
"ng_worklist",
#ifdef SMP
#ifdef __i386__
"ap boot",

View File

@ -3269,13 +3269,13 @@ ngintr(void)
item = ng_dequeue(&node->nd_input_queue);
if (item == NULL) {
mtx_unlock_spin(&node->nd_input_queue.q_mtx);
NG_NODE_UNREF(node);
break; /* go look for another node */
} else {
mtx_unlock_spin(&node->nd_input_queue.q_mtx);
ng_apply_item(item);
}
}
NG_NODE_UNREF(node);
}
}
@ -3544,7 +3544,8 @@ ng_send_fn(node_p node, hook_p hook, ng_item_fn *fn, void * arg1, int arg2)
return (ENOMEM);
}
item->el_flags = NGQF_FN | NGQF_WRITER;
NG_NODE_REF(node);
NG_NODE_REF(node); /* One for us */
NG_NODE_REF(node); /* and one for the item */
NGI_SET_NODE(item, node);
if (hook) {
NG_HOOK_REF(hook);
@ -3554,6 +3555,7 @@ ng_send_fn(node_p node, hook_p hook, ng_item_fn *fn, void * arg1, int arg2)
NGI_ARG1(item) = arg1;
NGI_ARG2(item) = arg2;
return (ng_snd_item(item, 0));
NG_NODE_UNREF(node);
}
/*