static int _applemidi_disconnect( struct MIDIDriverAppleMIDI * driver, int fd ) { struct RTPPeer * peer = NULL; RTPSessionNextPeer( driver->rtp_session, &peer ); while( peer != NULL ) { _applemidi_disconnect_peer( driver, peer ); peer = NULL; /* peer was removed, find the new first */ RTPSessionNextPeer( driver->rtp_session, &peer ); } if( fd == driver->control_socket || fd == 0 ) { MIDIRunloopSourceClearRead( driver->base.rls, driver->control_socket ); MIDIRunloopSourceClearWrite( driver->base.rls, driver->control_socket ); if( driver->control_socket > 0 ) { if( close( driver->control_socket ) ) { return 1; } driver->control_socket = 0; } } if( fd == driver->rtp_socket || fd == 0 ) { MIDIRunloopSourceClearRead( driver->base.rls, driver->rtp_socket ); MIDIRunloopSourceClearWrite( driver->base.rls, driver->rtp_socket ); if( driver->rtp_socket > 0 ) { if( close( driver->rtp_socket ) ) { return 1; } driver->rtp_socket = 0; } } return 0; }
static int _applemidi_disconnect(struct MIDIDriverAppleMIDI *driver, struct socket *sock) { struct RTPPeer *peer = NULL; RTPSessionNextPeer(driver->rtp_session, &peer); while (peer != NULL) { _applemidi_disconnect_peer(driver, peer); peer = NULL; /* peer was removed, find the new first*/ RTPSessionNextPeer(driver->rtp_session, &peer); } if (sock == driver->control_socket || sock == NULL) { if (driver->control_socket != NULL) { sock_release(driver->control_socket); driver->control_socket = NULL; pr_debug("control released\n"); } } if (sock == driver->rtp_socket || sock == NULL) { if (driver->rtp_socket != NULL) { sock_release(driver->rtp_socket); driver->rtp_socket = NULL; pr_debug("rtp released\n"); } } return 0; }