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_ping
, ice_isA
, ice_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.