code: @Override
      public void terminateIOCB(CompletionKey theKey) {
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.entry(tc, "terminateIOCB");
          }
          // termIOCB will cross into native code, so do not call termIOCB
          // on unix platforms, since they don't do anything in this method
          if (doNativeIOCBInitAndTerm && AIO_INITIALIZED == aioInitialized) {
  
              synchronized (oneAtATime) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, "have lock");
                  }
                  if (aioInitialized == AIO_INITIALIZED) {
  
                      try {
                          aio_termIOCB(theKey.getAddress());
                      } catch (AsyncException ae) {
                          // just log the error and go on
                          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                              Tr.debug(tc, "Error occured while terminating IOCB" + 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_termIOCB: " + t.getMessage());
                          }
                      }
                  }
              } // end-sync
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.exit(tc, "terminateIOCB");
          }
      }
docs: /*
  @see com.ibm.io.async.IAsyncProvider#terminateIOCB(com.ibm.io.async.CompletionKey)