* Hook disconnection */
| 363 | * Hook disconnection |
| 364 | */ |
| 365 | static int |
| 366 | ng_tee_disconnect(hook_p hook) |
| 367 | { |
| 368 | sc_p sc = NG_NODE_PRIVATE(NG_HOOK_NODE(hook)); |
| 369 | hi_p const hinfo = NG_HOOK_PRIVATE(hook); |
| 370 | |
| 371 | KASSERT(hinfo != NULL, ("%s: null info", __func__)); |
| 372 | hinfo->hook = NULL; |
| 373 | |
| 374 | /* Recalculate internal paths. */ |
| 375 | if (sc->left.dest == hinfo) { |
| 376 | sc->left.dest = sc->left.dup; |
| 377 | sc->left.dup = NULL; |
| 378 | } else if (sc->left.dup == hinfo) |
| 379 | sc->left.dup = NULL; |
| 380 | if (sc->right.dest == hinfo) { |
| 381 | sc->right.dest = sc->right.dup; |
| 382 | sc->right.dup = NULL; |
| 383 | } else if (sc->right.dup == hinfo) |
| 384 | sc->right.dup = NULL; |
| 385 | if (sc->left2right.dest == hinfo) |
| 386 | sc->left2right.dest = NULL; |
| 387 | if (sc->right2left.dest == hinfo) |
| 388 | sc->right2left.dest = NULL; |
| 389 | |
| 390 | /* Die when last hook disconnected. */ |
| 391 | if ((NG_NODE_NUMHOOKS(NG_HOOK_NODE(hook)) == 0) && |
| 392 | NG_NODE_IS_VALID(NG_HOOK_NODE(hook))) |
| 393 | ng_rmnode_self(NG_HOOK_NODE(hook)); |
| 394 | return (0); |
| 395 | } |
nothing calls this directly
no test coverage detected