MCPcopy Create free account
hub / github.com/F-Stack/f-stack / ng_ksocket_shutdown

Function ng_ksocket_shutdown

freebsd/netgraph/ng_ksocket.c:931–967  ·  view source on GitHub ↗

* Destroy node */

Source from the content-addressed store, hash-verified

929 * Destroy node
930 */
931static int
932ng_ksocket_shutdown(node_p node)
933{
934 const priv_p priv = NG_NODE_PRIVATE(node);
935 priv_p embryo;
936
937 /* Close our socket (if any) */
938 if (priv->so != NULL) {
939 SOCKBUF_LOCK(&priv->so->so_rcv);
940 soupcall_clear(priv->so, SO_RCV);
941 SOCKBUF_UNLOCK(&priv->so->so_rcv);
942 SOCKBUF_LOCK(&priv->so->so_snd);
943 soupcall_clear(priv->so, SO_SND);
944 SOCKBUF_UNLOCK(&priv->so->so_snd);
945 soclose(priv->so);
946 priv->so = NULL;
947 }
948
949 /* If we are an embryo, take ourselves out of the parent's list */
950 if (priv->flags & KSF_EMBRYONIC) {
951 LIST_REMOVE(priv, siblings);
952 priv->flags &= ~KSF_EMBRYONIC;
953 }
954
955 /* Remove any embryonic children we have */
956 while (!LIST_EMPTY(&priv->embryos)) {
957 embryo = LIST_FIRST(&priv->embryos);
958 ng_rmnode_self(embryo->node);
959 }
960
961 /* Take down netgraph node */
962 bzero(priv, sizeof(*priv));
963 free(priv, M_NETGRAPH_KSOCKET);
964 NG_NODE_SET_PRIVATE(node, NULL);
965 NG_NODE_UNREF(node); /* let the node escape */
966 return (0);
967}
968
969/*
970 * Hook disconnection

Callers

nothing calls this directly

Calls 5

soupcall_clearFunction · 0.85
socloseFunction · 0.85
bzeroFunction · 0.85
ng_rmnode_selfFunction · 0.70
freeFunction · 0.50

Tested by

no test coverage detected