code: @Override
      public long dispose(long channelIdentifier) {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.entry(tc, "dispose", Long.valueOf(channelIdentifier));
          }
          long rc = 0L;
          synchronized (oneAtATime) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "have lock");
              }
  
              if (aioInitialized == AIO_INITIALIZED) {
  
                  try {
                      rc = aio_dispose(channelIdentifier);
                  } catch (AsyncException ae) {
                      // just log any errors
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                          Tr.debug(tc, "Error disposing channel: " + channelIdentifier + ", error: " + ae.getMessage());
                      }
                  } catch (Throwable t) {
                      if (aioInitialized != AIO_SHUTDOWN) {
                          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                              Tr.debug(tc, "caught throwable:" + t);
                          }
                          throw new RuntimeException("Throwable caught from aio dll: aio_dispose: " + t.getMessage());
                      }
                  }
              }
          } // end-sync
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.exit(tc, "dispose");
          }
          return rc;
      }
docs: /*
  @see com.ibm.io.async.IAsyncProvider#dispose(long)