Lines Matching refs:so

47 #define	SO_WAKEUP_READER(so) {				\  argument
48 if ((so)->so_rcv_wakeup) { \
49 (so)->so_rcv_wakeup = B_FALSE; \
50 cv_signal(&(so)->so_rcv_cv); \
54 #define SO_WAKEUP_WRITER(so) { \ argument
55 if ((so)->so_snd_wakeup) { \
56 (so)->so_snd_wakeup = B_FALSE; \
57 cv_broadcast(&(so)->so_snd_cv); \
73 so_notify_connected(struct sonode *so) in so_notify_connected() argument
75 ASSERT(MUTEX_HELD(&so->so_lock)); in so_notify_connected()
77 if (IS_KERNEL_SOCKET(so)) { in so_notify_connected()
78 KSOCKET_CALLBACK(so, connected, 0); in so_notify_connected()
79 mutex_exit(&so->so_lock); in so_notify_connected()
81 socket_sendsig(so, SOCKETSIG_WRITE); in so_notify_connected()
82 mutex_exit(&so->so_lock); in so_notify_connected()
83 pollwakeup(&so->so_poll_list, POLLOUT); in so_notify_connected()
85 sof_sonode_notify_filters(so, SOF_EV_CONNECTED, 0); in so_notify_connected()
87 ASSERT(MUTEX_NOT_HELD(&so->so_lock)); in so_notify_connected()
95 so_notify_disconnecting(struct sonode *so) in so_notify_disconnecting() argument
100 ASSERT(MUTEX_HELD(&so->so_lock)); in so_notify_disconnecting()
101 (void) i_so_notify_last_tx(so, &pollev, &sigev); in so_notify_disconnecting()
103 if (IS_KERNEL_SOCKET(so)) { in so_notify_disconnecting()
104 KSOCKET_CALLBACK(so, cantsendmore, 0); in so_notify_disconnecting()
105 mutex_exit(&so->so_lock); in so_notify_disconnecting()
108 socket_sendsig(so, sigev); in so_notify_disconnecting()
109 mutex_exit(&so->so_lock); in so_notify_disconnecting()
112 pollwakeup(&so->so_poll_list, pollev); in so_notify_disconnecting()
114 sof_sonode_notify_filters(so, SOF_EV_CANTSENDMORE, 0); in so_notify_disconnecting()
116 ASSERT(MUTEX_NOT_HELD(&so->so_lock)); in so_notify_disconnecting()
124 so_notify_disconnected(struct sonode *so, boolean_t connfailed, int error) in so_notify_disconnected() argument
129 ASSERT(MUTEX_HELD(&so->so_lock)); in so_notify_disconnected()
131 (void) i_so_notify_last_tx(so, &pollev, &sigev); in so_notify_disconnected()
132 (void) i_so_notify_last_rx(so, &pollev, &sigev); in so_notify_disconnected()
134 if (IS_KERNEL_SOCKET(so)) { in so_notify_disconnected()
136 KSOCKET_CALLBACK(so, disconnected, error); in so_notify_disconnected()
138 KSOCKET_CALLBACK(so, connectfailed, error); in so_notify_disconnected()
140 mutex_exit(&so->so_lock); in so_notify_disconnected()
143 socket_sendsig(so, sigev); in so_notify_disconnected()
144 mutex_exit(&so->so_lock); in so_notify_disconnected()
156 pollwakeup(&so->so_poll_list, pollev); in so_notify_disconnected()
158 sof_sonode_notify_filters(so, (connfailed) ? SOF_EV_CONNECTFAILED : in so_notify_disconnected()
161 ASSERT(MUTEX_NOT_HELD(&so->so_lock)); in so_notify_disconnected()
168 so_notify_writable(struct sonode *so) in so_notify_writable() argument
170 ASSERT(MUTEX_HELD(&so->so_lock)); in so_notify_writable()
172 SO_WAKEUP_WRITER(so); in so_notify_writable()
174 if (IS_KERNEL_SOCKET(so)) { in so_notify_writable()
175 KSOCKET_CALLBACK(so, cansend, 0); in so_notify_writable()
176 mutex_exit(&so->so_lock); in so_notify_writable()
178 socket_sendsig(so, SOCKETSIG_WRITE); in so_notify_writable()
179 mutex_exit(&so->so_lock); in so_notify_writable()
180 pollwakeup(&so->so_poll_list, POLLOUT); in so_notify_writable()
183 ASSERT(MUTEX_NOT_HELD(&so->so_lock)); in so_notify_writable()
186 if (so->so_filter_active > 0) in so_notify_writable()
187 sof_sonode_notify_filters(so, SOF_EV_INJECT_DATA_OUT_OK, 0); in so_notify_writable()
194 so_notify_data(struct sonode *so, size_t qlen) in so_notify_data() argument
196 ASSERT(MUTEX_HELD(&so->so_lock)); in so_notify_data()
198 SO_WAKEUP_READER(so); in so_notify_data()
200 if (IS_KERNEL_SOCKET(so)) { in so_notify_data()
201 KSOCKET_CALLBACK(so, newdata, qlen); in so_notify_data()
202 mutex_exit(&so->so_lock); in so_notify_data()
204 socket_sendsig(so, SOCKETSIG_READ); in so_notify_data()
205 if (so->so_pollev & (SO_POLLEV_IN|SO_POLLEV_ALWAYS)) { in so_notify_data()
206 so->so_pollev &= ~SO_POLLEV_IN; in so_notify_data()
207 mutex_exit(&so->so_lock); in so_notify_data()
208 pollwakeup(&so->so_poll_list, POLLIN|POLLRDNORM); in so_notify_data()
210 mutex_exit(&so->so_lock); in so_notify_data()
214 ASSERT(MUTEX_NOT_HELD(&so->so_lock)); in so_notify_data()
221 so_notify_error(struct sonode *so) in so_notify_error() argument
223 ASSERT(MUTEX_HELD(&so->so_lock)); in so_notify_error()
225 SO_WAKEUP_WRITER(so); in so_notify_error()
226 SO_WAKEUP_READER(so); in so_notify_error()
228 if (IS_KERNEL_SOCKET(so)) { in so_notify_error()
229 KSOCKET_CALLBACK(so, error, 0); in so_notify_error()
230 mutex_exit(&so->so_lock); in so_notify_error()
232 socket_sendsig(so, SOCKETSIG_WRITE|SOCKETSIG_READ); in so_notify_error()
233 so->so_pollev &= ~SO_POLLEV_IN; in so_notify_error()
234 mutex_exit(&so->so_lock); in so_notify_error()
235 pollwakeup(&so->so_poll_list, POLLOUT|POLLIN|POLLRDNORM); in so_notify_error()
238 ASSERT(MUTEX_NOT_HELD(&so->so_lock)); in so_notify_error()
245 so_notify_oobsig(struct sonode *so) in so_notify_oobsig() argument
247 socket_sendsig(so, SOCKETSIG_URG); in so_notify_oobsig()
248 mutex_exit(&so->so_lock); in so_notify_oobsig()
249 pollwakeup(&so->so_poll_list, POLLRDBAND); in so_notify_oobsig()
258 so_notify_oobdata(struct sonode *so, boolean_t oob_inline) in so_notify_oobdata() argument
260 ASSERT(MUTEX_HELD(&so->so_lock)); in so_notify_oobdata()
261 if (so->so_direct != NULL) in so_notify_oobdata()
262 SOD_UIOAFINI(so->so_direct); in so_notify_oobdata()
264 SO_WAKEUP_READER(so); in so_notify_oobdata()
266 if (IS_KERNEL_SOCKET(so)) { in so_notify_oobdata()
267 KSOCKET_CALLBACK(so, oobdata, 0); in so_notify_oobdata()
268 mutex_exit(&so->so_lock); in so_notify_oobdata()
271 socket_sendsig(so, SOCKETSIG_READ); in so_notify_oobdata()
272 so->so_pollev &= ~SO_POLLEV_IN; in so_notify_oobdata()
273 mutex_exit(&so->so_lock); in so_notify_oobdata()
274 pollwakeup(&so->so_poll_list, in so_notify_oobdata()
277 mutex_exit(&so->so_lock); in so_notify_oobdata()
278 pollwakeup(&so->so_poll_list, POLLRDBAND); in so_notify_oobdata()
282 ASSERT(MUTEX_NOT_HELD(&so->so_lock)); in so_notify_oobdata()
290 so_notify_eof(struct sonode *so) in so_notify_eof() argument
295 ASSERT(MUTEX_HELD(&so->so_lock)); in so_notify_eof()
297 (void) i_so_notify_last_rx(so, &pollev, &sigev); in so_notify_eof()
299 if (IS_KERNEL_SOCKET(so)) { in so_notify_eof()
300 KSOCKET_CALLBACK(so, cantrecvmore, 0); in so_notify_eof()
301 mutex_exit(&so->so_lock); in so_notify_eof()
304 socket_sendsig(so, sigev); in so_notify_eof()
305 mutex_exit(&so->so_lock); in so_notify_eof()
307 pollwakeup(&so->so_poll_list, pollev); in so_notify_eof()
310 sof_sonode_notify_filters(so, SOF_EV_CANTRECVMORE, 0); in so_notify_eof()
312 ASSERT(MUTEX_NOT_HELD(&so->so_lock)); in so_notify_eof()
319 so_notify_newconn(struct sonode *so) in so_notify_newconn() argument
321 ASSERT(MUTEX_HELD(&so->so_lock)); in so_notify_newconn()
323 if (IS_KERNEL_SOCKET(so)) { in so_notify_newconn()
324 KSOCKET_CALLBACK(so, newconn, 0); in so_notify_newconn()
325 mutex_exit(&so->so_lock); in so_notify_newconn()
327 socket_sendsig(so, SOCKETSIG_READ); in so_notify_newconn()
328 if (so->so_pollev & (SO_POLLEV_IN|SO_POLLEV_ALWAYS)) { in so_notify_newconn()
329 so->so_pollev &= ~SO_POLLEV_IN; in so_notify_newconn()
330 mutex_exit(&so->so_lock); in so_notify_newconn()
331 pollwakeup(&so->so_poll_list, POLLIN|POLLRDNORM); in so_notify_newconn()
333 mutex_exit(&so->so_lock); in so_notify_newconn()
337 ASSERT(MUTEX_NOT_HELD(&so->so_lock)); in so_notify_newconn()
345 so_notify_shutdown(struct sonode *so) in so_notify_shutdown() argument
350 ASSERT(MUTEX_HELD(&so->so_lock)); in so_notify_shutdown()
351 ASSERT(so->so_state & (SS_CANTSENDMORE|SS_CANTRCVMORE)); in so_notify_shutdown()
353 if (so->so_state & SS_CANTSENDMORE) in so_notify_shutdown()
354 (void) i_so_notify_last_tx(so, &pollev, &sigev); in so_notify_shutdown()
355 if (so->so_state & SS_CANTRCVMORE) in so_notify_shutdown()
356 (void) i_so_notify_last_rx(so, &pollev, &sigev); in so_notify_shutdown()
359 socket_sendsig(so, sigev); in so_notify_shutdown()
360 mutex_exit(&so->so_lock); in so_notify_shutdown()
362 pollwakeup(&so->so_poll_list, pollev); in so_notify_shutdown()
364 ASSERT(MUTEX_NOT_HELD(&so->so_lock)); in so_notify_shutdown()
372 i_so_notify_last_rx(struct sonode *so, int *pollev, int *sigev) in i_so_notify_last_rx() argument
374 if (!(so->so_state & SS_SENTLASTREADSIG)) { in i_so_notify_last_rx()
375 SOCKET_TIMER_CANCEL(so); in i_so_notify_last_rx()
376 SO_WAKEUP_READER(so); in i_so_notify_last_rx()
377 so->so_state |= SS_SENTLASTREADSIG; in i_so_notify_last_rx()
378 so->so_pollev &= ~SO_POLLEV_IN; in i_so_notify_last_rx()
393 i_so_notify_last_tx(struct sonode *so, int *pollev, int *sigev) in i_so_notify_last_tx() argument
395 if (!(so->so_state & SS_SENTLASTWRITESIG)) { in i_so_notify_last_tx()
396 SO_WAKEUP_WRITER(so); in i_so_notify_last_tx()
397 so->so_state |= SS_SENTLASTWRITESIG; in i_so_notify_last_tx()