Print this page
12976 system panics with error in IP module
Reviewed by: Andy Fiddaman <andy@omniosce.org>
Reviewed by: Paul Winder <p.winder@me.com>

*** 20,30 **** */ /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2014, 2017 by Delphix. All rights reserved. ! * Copyright 2019 Joyent, Inc. */ /* This file contains all TCP output processing functions. */ #include <sys/types.h> --- 20,30 ---- */ /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2014, 2017 by Delphix. All rights reserved. ! * Copyright 2020 Joyent, Inc. */ /* This file contains all TCP output processing functions. */ #include <sys/types.h>
*** 1675,1689 **** connp->conn_rq = NULL; connp->conn_wq = NULL; /* non-STREAM socket, release the upper handle */ if (IPCL_IS_NONSTR(connp)) { ! ASSERT(connp->conn_upper_handle != NULL); ! (*connp->conn_upcalls->su_closed) ! (connp->conn_upper_handle); connp->conn_upper_handle = NULL; connp->conn_upcalls = NULL; } } /* Signal tcp_close() to finish closing. */ mutex_enter(&tcp->tcp_closelock); --- 1675,1701 ---- connp->conn_rq = NULL; connp->conn_wq = NULL; /* non-STREAM socket, release the upper handle */ if (IPCL_IS_NONSTR(connp)) { ! sock_upcalls_t *upcalls = connp->conn_upcalls; ! sock_upper_handle_t handle = connp->conn_upper_handle; ! ! ASSERT(upcalls != NULL); ! ASSERT(upcalls->su_closed != NULL); ! ASSERT(handle != NULL); ! /* ! * Set these to NULL first because closed() will free ! * upper structures. Acquire conn_lock because an ! * external caller like conn_get_socket_info() will ! * upcall if these are non-NULL. ! */ ! mutex_enter(&connp->conn_lock); connp->conn_upper_handle = NULL; connp->conn_upcalls = NULL; + mutex_exit(&connp->conn_lock); + upcalls->su_closed(handle); } } /* Signal tcp_close() to finish closing. */ mutex_enter(&tcp->tcp_closelock);