示例#1
0
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;
}
示例#2
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;
}