Blocking API Calls

This page lists the Ice APIs that can potentially block the calling thread. Graphical applications should normally avoid calling these APIs from the "event loop" thread.

The JavaScript mapping does not have any blocking APIs. The operations listed below are implemented as asynchronous operations.

Synchronous Invocations

All synchronous remote invocations can block, including the built-in proxy operations ice_pingice_isAice_id and ice_ids. Since checkedCast internally calls ice_isA, it too can block.

Asynchronous Invocations

For the C++98, C#, Python and Java Compat language mappings that still support the older begin/end API for asynchronous remote invocations, the begin method never blocks but the end method can block. Furthermore, the AsyncResult object returned by begin defines two methods that can potentially block: waitForCompleted and waitForSent.

In the C++11, C#, Python and Java language mappings, the opAsync method never blocks, but the future or task object it returns provides an accessor that can block indefinitely until a result or exception is set.

Local APIs

Ice also provides a number of local APIs that can block, either because they wait indefinitely for a condition to become true, or because their implementations may make remote invocations:

  • Communicator
    • createAdmin
    • createObjectAdapter
    • createObjectAdapterWithEndpoints
    • createObjectAdapterWithRouter
    • destroy
    • end_flushBatchRequests (C++98, C#, Python, Java Compat)
    • flushBatchRequests
    • getAdmin
    • shutdown
    • waitForShutdown
  • Connection
    • close
    • end_flushBatchRequests (C++98, C#, Python, Java Compat)
    • flushBatchRequests
  • ObjectPrx
    • ice_getConnection
    • end_ice_getConnection (C++98, C#, Python, Java Compat)
  • ObjectAdapter
    • activate
    • deactivate
    • destroy
    • waitForDeactivate
    • waitForHold

The Java and Java Compat mappings allow you to interrupt threads blocked in these APIs.