zeroc-ice 3.6.5 → 3.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (752) hide show
  1. checksums.yaml +4 -4
  2. data/BZIP2_LICENSE +42 -0
  3. data/ICE_LICENSE +17 -17
  4. data/LICENSE +12 -12
  5. data/bin/slice2rb +1 -1
  6. data/ext/Communicator.cpp +150 -53
  7. data/ext/Communicator.h +1 -1
  8. data/ext/Config.h +2 -12
  9. data/ext/Connection.cpp +89 -68
  10. data/ext/Connection.h +1 -1
  11. data/ext/Endpoint.cpp +16 -45
  12. data/ext/Endpoint.h +1 -1
  13. data/ext/ImplicitContext.cpp +1 -5
  14. data/ext/ImplicitContext.h +1 -1
  15. data/ext/Init.cpp +4 -1
  16. data/ext/Logger.cpp +1 -1
  17. data/ext/Logger.h +1 -1
  18. data/ext/Operation.cpp +33 -44
  19. data/ext/Operation.h +1 -1
  20. data/ext/Properties.cpp +1 -1
  21. data/ext/Properties.h +1 -1
  22. data/ext/Proxy.cpp +22 -57
  23. data/ext/Proxy.h +1 -1
  24. data/ext/Slice.cpp +5 -5
  25. data/ext/Slice.h +1 -1
  26. data/ext/Types.cpp +244 -171
  27. data/ext/Types.h +118 -66
  28. data/ext/Util.cpp +13 -9
  29. data/ext/Util.h +10 -10
  30. data/ext/ValueFactoryManager.cpp +445 -0
  31. data/ext/ValueFactoryManager.h +100 -0
  32. data/ext/extconf.rb +47 -45
  33. data/ext/ice/bzip2/blocksort.c +1094 -0
  34. data/ext/ice/bzip2/bzlib.c +1572 -0
  35. data/ext/ice/bzip2/bzlib.h +282 -0
  36. data/ext/ice/bzip2/bzlib_private.h +509 -0
  37. data/ext/ice/bzip2/compress.c +672 -0
  38. data/ext/ice/bzip2/crctable.c +104 -0
  39. data/ext/ice/bzip2/decompress.c +646 -0
  40. data/ext/ice/bzip2/huffman.c +205 -0
  41. data/ext/ice/bzip2/randtable.c +84 -0
  42. data/ext/ice/cpp/include/Ice/Application.h +77 -60
  43. data/ext/ice/cpp/include/Ice/AsyncResult.h +34 -318
  44. data/ext/ice/cpp/include/Ice/AsyncResultF.h +4 -2
  45. data/ext/ice/cpp/include/Ice/BatchRequestInterceptor.h +5 -10
  46. data/ext/ice/cpp/include/Ice/BatchRequestQueueF.h +1 -1
  47. data/ext/ice/cpp/include/Ice/Buffer.h +10 -10
  48. data/ext/ice/cpp/include/Ice/CommunicatorAsync.h +14 -12
  49. data/ext/ice/cpp/include/Ice/Comparable.h +130 -0
  50. data/ext/ice/cpp/include/Ice/Config.h +7 -36
  51. data/ext/ice/cpp/include/Ice/ConnectionAsync.h +107 -11
  52. data/ext/ice/cpp/include/Ice/ConnectionIF.h +5 -1
  53. data/ext/ice/cpp/include/Ice/ConsoleUtil.h +28 -0
  54. data/ext/ice/cpp/include/Ice/{DefaultObjectFactory.h → DefaultValueFactory.h} +28 -14
  55. data/ext/ice/cpp/include/Ice/DispatchInterceptor.h +4 -6
  56. data/ext/ice/cpp/include/Ice/Dispatcher.h +14 -13
  57. data/ext/ice/cpp/include/Ice/DynamicLibrary.h +7 -5
  58. data/ext/ice/cpp/include/Ice/DynamicLibraryF.h +1 -1
  59. data/ext/ice/cpp/include/Ice/Exception.h +66 -56
  60. data/ext/ice/cpp/include/Ice/ExceptionHelpers.h +69 -0
  61. data/ext/ice/cpp/include/Ice/FactoryTable.h +11 -12
  62. data/ext/ice/cpp/include/Ice/FactoryTableInit.h +27 -25
  63. data/ext/ice/cpp/include/Ice/Format.h +6 -1
  64. data/ext/ice/cpp/include/Ice/Functional.h +33 -33
  65. data/ext/ice/cpp/include/Ice/GCObject.h +9 -5
  66. data/ext/ice/cpp/include/Ice/Handle.h +6 -11
  67. data/ext/ice/cpp/include/Ice/Ice.h +9 -5
  68. data/ext/ice/cpp/include/{IceUtil → Ice}/IconvStringConverter.h +108 -62
  69. data/ext/ice/cpp/include/Ice/Incoming.h +109 -33
  70. data/ext/ice/cpp/include/Ice/IncomingAsync.h +63 -23
  71. data/ext/ice/cpp/include/Ice/IncomingAsyncF.h +7 -1
  72. data/ext/ice/cpp/include/Ice/Initialize.h +178 -38
  73. data/ext/ice/cpp/include/Ice/InputStream.h +994 -0
  74. data/ext/ice/cpp/include/Ice/InstanceF.h +1 -2
  75. data/ext/ice/cpp/include/Ice/InterfaceByValue.h +46 -0
  76. data/ext/ice/cpp/include/Ice/LocalObject.h +9 -9
  77. data/ext/ice/cpp/include/Ice/LocalObjectF.h +1 -1
  78. data/ext/ice/cpp/include/Ice/LoggerUtil.h +20 -14
  79. data/ext/ice/cpp/include/Ice/MetricsAdminI.h +114 -65
  80. data/ext/ice/cpp/include/Ice/MetricsFunctional.h +23 -5
  81. data/ext/ice/cpp/include/Ice/MetricsObserverI.h +99 -26
  82. data/ext/ice/cpp/include/Ice/NativePropertiesAdmin.h +17 -4
  83. data/ext/ice/cpp/include/Ice/Object.h +105 -56
  84. data/ext/ice/cpp/include/Ice/ObjectF.h +8 -3
  85. data/ext/ice/cpp/include/Ice/ObserverHelper.h +18 -8
  86. data/ext/ice/cpp/include/Ice/Optional.h +1084 -0
  87. data/ext/ice/cpp/include/Ice/OutgoingAsync.h +655 -84
  88. data/ext/ice/cpp/include/Ice/OutgoingAsyncF.h +12 -6
  89. data/ext/ice/cpp/include/Ice/OutputStream.h +753 -0
  90. data/ext/ice/cpp/include/Ice/Protocol.h +19 -12
  91. data/ext/ice/cpp/include/Ice/Proxy.h +1329 -717
  92. data/ext/ice/cpp/include/Ice/ProxyF.h +11 -33
  93. data/ext/ice/cpp/include/Ice/ProxyFactoryF.h +1 -1
  94. data/ext/ice/cpp/include/Ice/ProxyHandle.h +34 -50
  95. data/ext/ice/cpp/include/Ice/ReferenceF.h +1 -1
  96. data/ext/ice/cpp/include/Ice/RegisterPlugins.h +22 -3
  97. data/ext/ice/cpp/include/Ice/RequestHandlerF.h +10 -4
  98. data/ext/ice/cpp/include/Ice/ResponseHandlerF.h +6 -1
  99. data/ext/ice/cpp/include/{IceUtil → Ice}/SHA1.h +16 -16
  100. data/ext/ice/cpp/include/Ice/ServantManagerF.h +1 -1
  101. data/ext/ice/cpp/include/Ice/Service.h +13 -18
  102. data/ext/ice/cpp/include/Ice/SliceChecksums.h +1 -1
  103. data/ext/ice/cpp/include/Ice/SlicedData.h +46 -20
  104. data/ext/ice/cpp/include/Ice/SlicedDataF.h +14 -6
  105. data/ext/ice/cpp/include/Ice/StreamHelpers.h +159 -49
  106. data/ext/ice/cpp/include/Ice/StringConverter.h +52 -0
  107. data/ext/ice/cpp/include/Ice/ThreadPoolF.h +1 -1
  108. data/{slice/Ice/ObjectFactoryF.ice → ext/ice/cpp/include/Ice/UUID.h} +9 -7
  109. data/ext/ice/cpp/include/{IceUtil → Ice}/UniquePtr.h +21 -22
  110. data/ext/ice/cpp/include/Ice/UniqueRef.h +98 -0
  111. data/ext/ice/cpp/include/Ice/UserExceptionFactory.h +40 -8
  112. data/ext/ice/cpp/include/Ice/Value.h +104 -0
  113. data/{slice/Freeze/ConnectionF.ice → ext/ice/cpp/include/Ice/ValueF.h} +11 -7
  114. data/ext/ice/cpp/include/IceSSL/Config.h +8 -23
  115. data/ext/ice/cpp/include/IceSSL/IceSSL.h +17 -6
  116. data/ext/ice/cpp/include/IceSSL/OpenSSL.h +130 -0
  117. data/ext/ice/cpp/include/IceSSL/Plugin.h +172 -259
  118. data/ext/ice/cpp/include/IceSSL/SChannel.h +66 -0
  119. data/ext/ice/cpp/include/IceSSL/SecureTransport.h +66 -0
  120. data/ext/ice/cpp/include/IceSSL/UWP.h +58 -0
  121. data/ext/ice/cpp/include/IceUtil/Atomic.h +8 -10
  122. data/ext/ice/cpp/include/IceUtil/Cond.h +17 -18
  123. data/ext/ice/cpp/include/IceUtil/Config.h +138 -39
  124. data/ext/ice/cpp/include/IceUtil/ConsoleUtil.h +97 -0
  125. data/ext/ice/cpp/include/IceUtil/CountDownLatch.h +5 -5
  126. data/ext/ice/cpp/include/IceUtil/CtrlCHandler.h +23 -17
  127. data/ext/ice/cpp/include/IceUtil/DisableWarnings.h +1 -3
  128. data/ext/ice/cpp/include/IceUtil/Exception.h +157 -67
  129. data/ext/ice/cpp/include/IceUtil/FileUtil.h +148 -0
  130. data/ext/ice/cpp/include/IceUtil/Functional.h +1 -2
  131. data/ext/ice/cpp/include/IceUtil/Handle.h +11 -11
  132. data/ext/ice/cpp/include/IceUtil/IceUtil.h +4 -10
  133. data/ext/ice/cpp/include/IceUtil/InputUtil.h +3 -3
  134. data/ext/ice/cpp/include/IceUtil/Iterator.h +2 -2
  135. data/ext/ice/cpp/include/IceUtil/Lock.h +8 -10
  136. data/ext/ice/cpp/include/IceUtil/Monitor.h +1 -2
  137. data/ext/ice/cpp/include/IceUtil/Mutex.h +17 -11
  138. data/ext/ice/cpp/include/IceUtil/MutexProtocol.h +2 -2
  139. data/ext/ice/cpp/include/IceUtil/MutexPtrLock.h +4 -4
  140. data/ext/ice/cpp/include/IceUtil/MutexPtrTryLock.h +4 -4
  141. data/ext/ice/cpp/include/IceUtil/Optional.h +32 -18
  142. data/ext/ice/cpp/include/IceUtil/Options.h +17 -18
  143. data/ext/ice/cpp/include/IceUtil/OutputUtil.h +55 -29
  144. data/ext/ice/cpp/include/IceUtil/PopDisableWarnings.h +6 -6
  145. data/ext/ice/cpp/include/IceUtil/PushDisableWarnings.h +11 -10
  146. data/ext/ice/cpp/include/IceUtil/Random.h +3 -3
  147. data/ext/ice/cpp/include/IceUtil/RecMutex.h +7 -8
  148. data/ext/ice/cpp/include/IceUtil/ResourceConfig.h +58 -0
  149. data/ext/ice/cpp/include/IceUtil/ScannerConfig.h +1 -9
  150. data/ext/ice/cpp/include/IceUtil/ScopedArray.h +8 -2
  151. data/ext/ice/cpp/include/IceUtil/Shared.h +5 -7
  152. data/ext/ice/cpp/{src → include}/IceUtil/StopWatch.h +2 -2
  153. data/ext/ice/cpp/include/IceUtil/StringConverter.h +77 -72
  154. data/ext/ice/cpp/include/IceUtil/StringUtil.h +32 -21
  155. data/ext/ice/cpp/include/IceUtil/Thread.h +10 -12
  156. data/ext/ice/cpp/include/IceUtil/ThreadException.h +33 -42
  157. data/ext/ice/cpp/include/IceUtil/Time.h +3 -3
  158. data/ext/ice/cpp/include/IceUtil/Timer.h +14 -13
  159. data/ext/ice/cpp/include/IceUtil/UUID.h +2 -2
  160. data/ext/ice/cpp/include/IceUtil/UndefSysMacros.h +1 -1
  161. data/ext/ice/cpp/include/{Ice → generated/Ice}/BuiltinSequences.h +41 -8
  162. data/ext/ice/cpp/include/generated/Ice/Communicator.h +364 -0
  163. data/ext/ice/cpp/include/{Ice → generated/Ice}/CommunicatorF.h +40 -8
  164. data/ext/ice/cpp/include/generated/Ice/Connection.h +872 -0
  165. data/ext/ice/cpp/include/{Ice → generated/Ice}/ConnectionF.h +46 -8
  166. data/ext/ice/cpp/include/{Ice → generated/Ice}/Current.h +71 -8
  167. data/ext/ice/cpp/include/generated/Ice/Endpoint.h +582 -0
  168. data/ext/ice/cpp/include/{Ice → generated/Ice}/EndpointF.h +62 -8
  169. data/ext/ice/cpp/include/{Ice → generated/Ice}/EndpointTypes.h +31 -16
  170. data/ext/ice/cpp/include/{Ice → generated/Ice}/FacetMap.h +23 -8
  171. data/ext/ice/cpp/include/generated/Ice/Identity.h +221 -0
  172. data/ext/ice/cpp/include/{Ice → generated/Ice}/ImplicitContext.h +72 -13
  173. data/ext/ice/cpp/include/{Ice → generated/Ice}/ImplicitContextF.h +40 -8
  174. data/ext/ice/cpp/include/generated/Ice/Instrumentation.h +602 -0
  175. data/ext/ice/cpp/include/{Ice → generated/Ice}/InstrumentationF.h +54 -8
  176. data/ext/ice/cpp/include/generated/Ice/LocalException.h +2802 -0
  177. data/ext/ice/cpp/include/generated/Ice/Locator.h +2036 -0
  178. data/ext/ice/cpp/include/{Ice → generated/Ice}/LocatorF.h +53 -12
  179. data/ext/ice/cpp/include/{Ice → generated/Ice}/Logger.h +71 -13
  180. data/ext/ice/cpp/include/{Ice → generated/Ice}/LoggerF.h +40 -8
  181. data/ext/ice/cpp/include/generated/Ice/Metrics.h +2649 -0
  182. data/ext/ice/cpp/include/generated/Ice/ObjectAdapter.h +302 -0
  183. data/ext/ice/cpp/include/{Ice → generated/Ice}/ObjectAdapterF.h +40 -8
  184. data/ext/ice/cpp/include/generated/Ice/ObjectFactory.h +142 -0
  185. data/ext/ice/cpp/include/generated/Ice/Plugin.h +197 -0
  186. data/ext/ice/cpp/include/{Ice → generated/Ice}/PluginF.h +43 -8
  187. data/ext/ice/cpp/include/generated/Ice/Process.h +536 -0
  188. data/ext/ice/cpp/include/{Ice → generated/Ice}/ProcessF.h +45 -10
  189. data/ext/ice/cpp/include/{Ice → generated/Ice}/Properties.h +88 -21
  190. data/ext/ice/cpp/include/generated/Ice/PropertiesAdmin.h +749 -0
  191. data/ext/ice/cpp/include/{Ice → generated/Ice}/PropertiesF.h +48 -10
  192. data/ext/ice/cpp/include/generated/Ice/RemoteLogger.h +1449 -0
  193. data/ext/ice/cpp/include/generated/Ice/Router.h +1032 -0
  194. data/ext/ice/cpp/include/{Ice → generated/Ice}/RouterF.h +45 -10
  195. data/ext/ice/cpp/include/{Ice → generated/Ice}/ServantLocator.h +65 -13
  196. data/ext/ice/cpp/include/{Ice → generated/Ice}/ServantLocatorF.h +40 -8
  197. data/ext/ice/cpp/include/{Ice → generated/Ice}/SliceChecksumDict.h +23 -8
  198. data/ext/ice/cpp/include/generated/Ice/ValueFactory.h +169 -0
  199. data/ext/ice/cpp/include/generated/Ice/Version.h +334 -0
  200. data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfo.h +172 -0
  201. data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfoF.h +98 -0
  202. data/ext/ice/cpp/include/generated/IceSSL/EndpointInfo.h +156 -0
  203. data/ext/ice/cpp/src/Ice/ACM.cpp +18 -14
  204. data/ext/ice/cpp/src/Ice/ACM.h +9 -2
  205. data/ext/ice/cpp/{include → src}/Ice/ACMF.h +10 -5
  206. data/ext/ice/cpp/src/Ice/Acceptor.cpp +6 -1
  207. data/ext/ice/cpp/src/Ice/Acceptor.h +4 -3
  208. data/ext/ice/cpp/src/Ice/AcceptorF.h +1 -1
  209. data/ext/ice/cpp/src/{IceUtil → Ice}/ArgVector.cpp +9 -9
  210. data/ext/ice/cpp/src/{IceUtil → Ice}/ArgVector.h +7 -7
  211. data/ext/ice/cpp/src/Ice/AsyncResult.cpp +15 -538
  212. data/ext/ice/cpp/src/Ice/Base64.cpp +11 -11
  213. data/ext/ice/cpp/src/Ice/Base64.h +1 -1
  214. data/ext/ice/cpp/src/Ice/BatchRequestQueue.cpp +40 -12
  215. data/ext/ice/cpp/src/Ice/BatchRequestQueue.h +15 -10
  216. data/ext/ice/cpp/src/Ice/Buffer.cpp +74 -12
  217. data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +20 -6
  218. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.cpp +85 -190
  219. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.h +17 -18
  220. data/ext/ice/cpp/src/Ice/Communicator.cpp +39 -8
  221. data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +27 -5
  222. data/ext/ice/cpp/src/Ice/CommunicatorI.cpp +271 -104
  223. data/ext/ice/cpp/src/Ice/CommunicatorI.h +84 -28
  224. data/ext/ice/cpp/src/{IceUtil → Ice}/Cond.cpp +3 -3
  225. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.cpp +58 -125
  226. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.h +11 -22
  227. data/ext/ice/cpp/src/Ice/ConnectRequestHandlerF.h +6 -2
  228. data/ext/ice/cpp/src/Ice/Connection.cpp +88 -8
  229. data/ext/ice/cpp/src/Ice/ConnectionF.cpp +27 -5
  230. data/ext/ice/cpp/src/Ice/ConnectionFactory.cpp +158 -80
  231. data/ext/ice/cpp/src/Ice/ConnectionFactory.h +41 -23
  232. data/ext/ice/cpp/{include → src}/Ice/ConnectionFactoryF.h +8 -3
  233. data/ext/ice/cpp/src/Ice/ConnectionI.cpp +707 -653
  234. data/ext/ice/cpp/src/Ice/ConnectionI.h +97 -69
  235. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.cpp +2 -15
  236. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.h +4 -3
  237. data/ext/ice/cpp/src/Ice/Connector.cpp +6 -1
  238. data/ext/ice/cpp/src/Ice/Connector.h +4 -3
  239. data/ext/ice/cpp/src/Ice/ConnectorF.h +1 -1
  240. data/ext/ice/cpp/src/{IceUtil → Ice}/CountDownLatch.cpp +4 -4
  241. data/ext/ice/cpp/src/Ice/Current.cpp +29 -6
  242. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +6 -5
  243. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.h +1 -1
  244. data/ext/ice/cpp/src/Ice/DefaultsAndOverridesF.h +1 -1
  245. data/ext/ice/cpp/src/Ice/DispatchInterceptor.cpp +5 -25
  246. data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +29 -19
  247. data/ext/ice/cpp/src/Ice/Endpoint.cpp +85 -6
  248. data/ext/ice/cpp/src/Ice/EndpointF.cpp +27 -5
  249. data/ext/ice/cpp/src/Ice/EndpointFactory.cpp +152 -1
  250. data/ext/ice/cpp/src/Ice/EndpointFactory.h +72 -6
  251. data/ext/ice/cpp/src/Ice/EndpointFactoryF.h +1 -1
  252. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.cpp +35 -19
  253. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.h +10 -4
  254. data/ext/ice/cpp/src/Ice/EndpointFactoryManagerF.h +1 -1
  255. data/ext/ice/cpp/src/Ice/EndpointI.cpp +17 -1
  256. data/ext/ice/cpp/src/Ice/EndpointI.h +35 -9
  257. data/ext/ice/cpp/src/Ice/EndpointIF.h +18 -5
  258. data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +18 -6
  259. data/ext/ice/cpp/src/Ice/EventHandler.cpp +6 -4
  260. data/ext/ice/cpp/src/Ice/EventHandler.h +13 -8
  261. data/ext/ice/cpp/src/Ice/EventHandlerF.h +5 -2
  262. data/ext/ice/cpp/src/Ice/Exception.cpp +95 -86
  263. data/ext/ice/cpp/src/Ice/FacetMap.cpp +20 -6
  264. data/ext/ice/cpp/src/Ice/FactoryTable.cpp +37 -28
  265. data/ext/ice/cpp/src/Ice/FactoryTableInit.cpp +2 -4
  266. data/ext/ice/cpp/src/Ice/GCObject.cpp +28 -25
  267. data/ext/ice/cpp/src/Ice/HashUtil.h +2 -3
  268. data/ext/ice/cpp/src/Ice/HttpParser.cpp +1 -2
  269. data/ext/ice/cpp/src/Ice/HttpParser.h +1 -1
  270. data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +92 -53
  271. data/ext/ice/cpp/src/Ice/IPEndpointI.h +19 -10
  272. data/ext/ice/cpp/src/Ice/IPEndpointIF.h +6 -2
  273. data/ext/ice/cpp/src/Ice/IconvStringConverter.cpp +56 -0
  274. data/ext/ice/cpp/src/Ice/Identity.cpp +24 -10
  275. data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +37 -6
  276. data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +27 -5
  277. data/ext/ice/cpp/src/Ice/ImplicitContextI.cpp +14 -14
  278. data/ext/ice/cpp/src/Ice/ImplicitContextI.h +7 -5
  279. data/ext/ice/cpp/src/Ice/Incoming.cpp +276 -245
  280. data/ext/ice/cpp/src/Ice/IncomingAsync.cpp +104 -209
  281. data/ext/ice/cpp/src/Ice/IncomingRequest.h +5 -4
  282. data/ext/ice/cpp/src/Ice/Initialize.cpp +299 -172
  283. data/ext/ice/cpp/src/Ice/InputStream.cpp +2773 -0
  284. data/ext/ice/cpp/src/Ice/Instance.cpp +191 -231
  285. data/ext/ice/cpp/src/Ice/Instance.h +30 -18
  286. data/ext/ice/cpp/src/Ice/Instrumentation.cpp +106 -7
  287. data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +27 -5
  288. data/ext/ice/cpp/src/Ice/InstrumentationI.cpp +117 -99
  289. data/ext/ice/cpp/src/Ice/InstrumentationI.h +30 -31
  290. data/ext/ice/cpp/src/Ice/LocalException.cpp +1190 -416
  291. data/ext/ice/cpp/src/Ice/LocalObject.cpp +1 -2
  292. data/ext/ice/cpp/src/Ice/Locator.cpp +1167 -1215
  293. data/ext/ice/cpp/src/Ice/LocatorF.cpp +29 -6
  294. data/ext/ice/cpp/src/Ice/LocatorInfo.cpp +129 -163
  295. data/ext/ice/cpp/src/Ice/LocatorInfo.h +29 -29
  296. data/ext/ice/cpp/src/Ice/LocatorInfoF.h +1 -1
  297. data/ext/ice/cpp/src/Ice/Logger.cpp +35 -5
  298. data/ext/ice/cpp/src/Ice/LoggerAdminI.cpp +178 -73
  299. data/ext/ice/cpp/src/Ice/LoggerAdminI.h +4 -4
  300. data/ext/ice/cpp/src/Ice/LoggerF.cpp +27 -5
  301. data/ext/ice/cpp/src/Ice/LoggerI.cpp +14 -44
  302. data/ext/ice/cpp/src/Ice/LoggerI.h +7 -13
  303. data/ext/ice/cpp/src/Ice/LoggerUtil.cpp +10 -12
  304. data/ext/ice/cpp/src/Ice/Metrics.cpp +1059 -1069
  305. data/ext/ice/cpp/src/Ice/MetricsAdminI.cpp +49 -19
  306. data/ext/ice/cpp/src/Ice/MetricsObserverI.cpp +1 -2
  307. data/ext/ice/cpp/src/Ice/Network.cpp +534 -170
  308. data/ext/ice/cpp/src/Ice/Network.h +100 -23
  309. data/ext/ice/cpp/src/Ice/NetworkF.h +2 -2
  310. data/ext/ice/cpp/src/Ice/NetworkProxy.cpp +21 -14
  311. data/ext/ice/cpp/src/Ice/NetworkProxy.h +5 -2
  312. data/ext/ice/cpp/src/Ice/NetworkProxyF.h +1 -1
  313. data/ext/ice/cpp/src/Ice/Object.cpp +217 -221
  314. data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +41 -6
  315. data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +27 -5
  316. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.cpp +35 -14
  317. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.h +13 -7
  318. data/ext/ice/cpp/{include → src}/Ice/ObjectAdapterFactoryF.h +5 -1
  319. data/ext/ice/cpp/src/Ice/ObjectAdapterI.cpp +184 -58
  320. data/ext/ice/cpp/src/Ice/ObjectAdapterI.h +32 -26
  321. data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +37 -6
  322. data/ext/ice/cpp/src/Ice/ObserverHelper.cpp +9 -32
  323. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.cpp +40 -18
  324. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.h +14 -5
  325. data/ext/ice/cpp/src/Ice/OutgoingAsync.cpp +803 -365
  326. data/ext/ice/cpp/src/Ice/OutputStream.cpp +1399 -0
  327. data/ext/ice/cpp/src/Ice/Plugin.cpp +45 -6
  328. data/ext/ice/cpp/src/Ice/PluginF.cpp +27 -5
  329. data/ext/ice/cpp/src/Ice/PluginManagerI.cpp +13 -13
  330. data/ext/ice/cpp/src/Ice/PluginManagerI.h +5 -6
  331. data/ext/ice/cpp/src/Ice/Process.cpp +256 -114
  332. data/ext/ice/cpp/src/Ice/ProcessF.cpp +29 -6
  333. data/ext/ice/cpp/src/Ice/Properties.cpp +38 -8
  334. data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +340 -328
  335. data/ext/ice/cpp/src/Ice/PropertiesAdminI.cpp +81 -17
  336. data/ext/ice/cpp/src/Ice/PropertiesAdminI.h +29 -5
  337. data/ext/ice/cpp/src/Ice/PropertiesF.cpp +29 -6
  338. data/ext/ice/cpp/src/Ice/PropertiesI.cpp +25 -26
  339. data/ext/ice/cpp/src/Ice/PropertiesI.h +8 -11
  340. data/ext/ice/cpp/src/Ice/PropertyNames.cpp +107 -50
  341. data/ext/ice/cpp/src/Ice/PropertyNames.h +4 -2
  342. data/ext/ice/cpp/src/Ice/Protocol.cpp +2 -2
  343. data/ext/ice/cpp/src/Ice/ProtocolInstance.cpp +37 -2
  344. data/ext/ice/cpp/src/Ice/ProtocolInstance.h +9 -20
  345. data/ext/ice/cpp/src/Ice/ProtocolInstanceF.h +1 -1
  346. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.cpp +6 -1
  347. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.h +3 -1
  348. data/ext/ice/cpp/src/Ice/ProtocolPluginFacadeF.h +1 -1
  349. data/ext/ice/cpp/src/Ice/Proxy.cpp +690 -964
  350. data/ext/ice/cpp/src/Ice/ProxyFactory.cpp +23 -32
  351. data/ext/ice/cpp/src/Ice/ProxyFactory.h +16 -11
  352. data/ext/ice/cpp/src/Ice/Reference.cpp +75 -69
  353. data/ext/ice/cpp/src/Ice/Reference.h +27 -22
  354. data/ext/ice/cpp/src/Ice/ReferenceFactory.cpp +18 -21
  355. data/ext/ice/cpp/src/Ice/ReferenceFactory.h +12 -12
  356. data/ext/ice/cpp/src/Ice/ReferenceFactoryF.h +1 -1
  357. data/ext/ice/cpp/src/Ice/RegisterPluginsInit.cpp +18 -4
  358. data/ext/ice/cpp/src/Ice/RegisterPluginsInit.h +1 -1
  359. data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +672 -552
  360. data/ext/ice/cpp/src/Ice/ReplyStatus.h +1 -1
  361. data/ext/ice/cpp/src/Ice/RequestHandler.cpp +5 -3
  362. data/ext/ice/cpp/src/Ice/RequestHandler.h +10 -13
  363. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.cpp +10 -6
  364. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.h +2 -2
  365. data/ext/ice/cpp/src/Ice/ResponseHandler.cpp +3 -6
  366. data/ext/ice/cpp/src/Ice/ResponseHandler.h +16 -7
  367. data/ext/ice/cpp/src/Ice/RetryQueue.cpp +6 -12
  368. data/ext/ice/cpp/src/Ice/RetryQueue.h +7 -6
  369. data/ext/ice/cpp/src/Ice/RetryQueueF.h +1 -1
  370. data/ext/ice/cpp/src/Ice/Router.cpp +523 -474
  371. data/ext/ice/cpp/src/Ice/RouterF.cpp +29 -6
  372. data/ext/ice/cpp/src/Ice/RouterInfo.cpp +91 -70
  373. data/ext/ice/cpp/src/Ice/RouterInfo.h +43 -32
  374. data/ext/ice/cpp/src/Ice/RouterInfoF.h +1 -1
  375. data/ext/ice/cpp/src/{IceUtil → Ice}/SHA1.cpp +21 -21
  376. data/ext/ice/cpp/src/Ice/Selector.cpp +989 -923
  377. data/ext/ice/cpp/src/Ice/Selector.h +100 -147
  378. data/ext/ice/cpp/src/Ice/ServantLocator.cpp +37 -6
  379. data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +27 -5
  380. data/ext/ice/cpp/src/Ice/ServantManager.cpp +9 -9
  381. data/ext/ice/cpp/src/Ice/ServantManager.h +1 -1
  382. data/ext/ice/cpp/src/Ice/SharedContext.h +2 -2
  383. data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +20 -6
  384. data/ext/ice/cpp/src/Ice/SliceChecksums.cpp +2 -2
  385. data/ext/ice/cpp/src/Ice/SlicedData.cpp +72 -20
  386. data/ext/ice/cpp/src/Ice/StreamSocket.cpp +173 -18
  387. data/ext/ice/cpp/src/Ice/StreamSocket.h +13 -4
  388. data/ext/ice/cpp/src/Ice/StringConverterPlugin.cpp +48 -17
  389. data/ext/ice/cpp/src/Ice/StringUtil.h +35 -0
  390. data/ext/ice/cpp/src/Ice/SysLoggerI.cpp +8 -4
  391. data/ext/ice/cpp/src/Ice/SysLoggerI.h +2 -3
  392. data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +158 -32
  393. data/ext/ice/cpp/src/Ice/TcpAcceptor.h +12 -5
  394. data/ext/ice/cpp/src/Ice/TcpConnector.cpp +1 -7
  395. data/ext/ice/cpp/src/Ice/TcpConnector.h +1 -2
  396. data/ext/ice/cpp/src/Ice/TcpEndpointI.cpp +40 -32
  397. data/ext/ice/cpp/src/Ice/TcpEndpointI.h +11 -8
  398. data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +12 -27
  399. data/ext/ice/cpp/src/Ice/TcpTransceiver.h +7 -10
  400. data/ext/ice/cpp/src/{IceUtil → Ice}/Thread.cpp +24 -41
  401. data/ext/ice/cpp/src/Ice/ThreadPool.cpp +175 -267
  402. data/ext/ice/cpp/src/Ice/ThreadPool.h +38 -43
  403. data/ext/ice/cpp/src/{IceUtil → Ice}/Timer.cpp +28 -21
  404. data/ext/ice/cpp/src/Ice/TraceLevels.cpp +2 -2
  405. data/ext/ice/cpp/src/Ice/TraceLevels.h +1 -1
  406. data/ext/ice/cpp/src/Ice/TraceLevelsF.h +2 -2
  407. data/ext/ice/cpp/src/Ice/TraceUtil.cpp +53 -31
  408. data/ext/ice/cpp/src/Ice/TraceUtil.h +13 -6
  409. data/ext/ice/cpp/src/Ice/Transceiver.cpp +1 -2
  410. data/ext/ice/cpp/src/Ice/Transceiver.h +8 -7
  411. data/ext/ice/cpp/src/Ice/TransceiverF.h +1 -1
  412. data/ext/ice/cpp/src/Ice/UdpConnector.cpp +2 -8
  413. data/ext/ice/cpp/src/Ice/UdpConnector.h +1 -2
  414. data/ext/ice/cpp/src/Ice/UdpEndpointI.cpp +92 -31
  415. data/ext/ice/cpp/src/Ice/UdpEndpointI.h +12 -4
  416. data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +150 -179
  417. data/ext/ice/cpp/src/Ice/UdpTransceiver.h +15 -17
  418. data/ext/ice/cpp/src/Ice/Value.cpp +81 -0
  419. data/ext/ice/cpp/src/Ice/ValueFactory.cpp +84 -0
  420. data/ext/ice/cpp/src/Ice/ValueFactoryManagerI.cpp +70 -0
  421. data/ext/ice/cpp/src/Ice/ValueFactoryManagerI.h +42 -0
  422. data/ext/ice/cpp/src/Ice/Version.cpp +24 -14
  423. data/ext/ice/cpp/src/Ice/VirtualShared.h +43 -0
  424. data/ext/ice/cpp/src/Ice/WSAcceptor.cpp +3 -9
  425. data/ext/ice/cpp/src/Ice/WSAcceptor.h +3 -7
  426. data/ext/ice/cpp/src/Ice/WSConnector.cpp +5 -11
  427. data/ext/ice/cpp/src/Ice/WSConnector.h +3 -6
  428. data/ext/ice/cpp/src/Ice/WSEndpoint.cpp +185 -80
  429. data/ext/ice/cpp/src/Ice/WSEndpoint.h +21 -31
  430. data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +41 -37
  431. data/ext/ice/cpp/src/Ice/WSTransceiver.h +7 -21
  432. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +526 -264
  433. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +341 -455
  434. data/ext/ice/cpp/src/IceDiscovery/LocatorI.cpp +86 -26
  435. data/ext/ice/cpp/src/IceDiscovery/LocatorI.h +59 -23
  436. data/ext/ice/cpp/src/IceDiscovery/LookupI.cpp +315 -61
  437. data/ext/ice/cpp/src/IceDiscovery/LookupI.h +83 -36
  438. data/ext/ice/cpp/src/IceDiscovery/PluginI.cpp +57 -59
  439. data/ext/ice/cpp/src/IceDiscovery/PluginI.h +3 -3
  440. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.cpp +396 -159
  441. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.h +251 -355
  442. data/ext/ice/cpp/src/IceLocatorDiscovery/Plugin.h +52 -0
  443. data/ext/ice/cpp/src/IceLocatorDiscovery/PluginI.cpp +526 -131
  444. data/ext/ice/cpp/src/IceSSL/AcceptorI.cpp +19 -165
  445. data/ext/ice/cpp/src/IceSSL/AcceptorI.h +8 -17
  446. data/ext/ice/cpp/src/IceSSL/CertificateI.cpp +284 -0
  447. data/ext/ice/cpp/src/IceSSL/CertificateI.h +69 -0
  448. data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +39 -11
  449. data/ext/ice/cpp/src/{Ice/ObjectFactoryF.cpp → IceSSL/ConnectionInfoF.cpp} +31 -9
  450. data/ext/ice/cpp/src/IceSSL/ConnectorI.cpp +14 -56
  451. data/ext/ice/cpp/src/IceSSL/ConnectorI.h +6 -13
  452. data/ext/ice/cpp/src/IceSSL/EndpointI.cpp +205 -197
  453. data/ext/ice/cpp/src/IceSSL/EndpointI.h +41 -33
  454. data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +39 -10
  455. data/ext/ice/cpp/src/IceSSL/Instance.cpp +1 -6
  456. data/ext/ice/cpp/src/IceSSL/Instance.h +7 -7
  457. data/ext/ice/cpp/src/IceSSL/InstanceF.h +11 -7
  458. data/ext/ice/cpp/src/IceSSL/OpenSSLCertificateI.cpp +588 -0
  459. data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +117 -152
  460. data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.h +64 -0
  461. data/ext/ice/cpp/src/IceSSL/OpenSSLEngineF.h +32 -0
  462. data/ext/ice/cpp/src/IceSSL/OpenSSLPluginI.cpp +132 -0
  463. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +400 -89
  464. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.h +36 -21
  465. data/ext/ice/cpp/src/IceSSL/OpenSSLUtil.cpp +291 -0
  466. data/ext/ice/cpp/src/IceSSL/OpenSSLUtil.h +63 -0
  467. data/ext/ice/cpp/src/IceSSL/PluginI.cpp +71 -41
  468. data/ext/ice/cpp/src/IceSSL/PluginI.h +13 -18
  469. data/ext/ice/cpp/src/IceSSL/RFC2253.cpp +9 -54
  470. data/ext/ice/cpp/src/IceSSL/RFC2253.h +7 -7
  471. data/ext/ice/cpp/src/IceSSL/SChannelCertificateI.cpp +585 -0
  472. data/ext/ice/cpp/src/IceSSL/SChannelEngine.cpp +491 -75
  473. data/ext/ice/cpp/src/IceSSL/SChannelEngine.h +126 -0
  474. data/ext/ice/cpp/src/IceSSL/SChannelEngineF.h +32 -0
  475. data/ext/ice/cpp/src/IceSSL/SChannelPluginI.cpp +78 -0
  476. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +126 -169
  477. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.h +19 -22
  478. data/ext/ice/cpp/src/IceSSL/SSLEngine.cpp +79 -74
  479. data/ext/ice/cpp/src/IceSSL/SSLEngine.h +24 -187
  480. data/ext/ice/cpp/src/IceSSL/SSLEngineF.h +4 -19
  481. data/ext/ice/cpp/src/IceSSL/SecureTransportCertificateI.cpp +862 -0
  482. data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.cpp +56 -214
  483. data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.h +60 -0
  484. data/ext/ice/cpp/src/IceSSL/SecureTransportEngineF.h +31 -0
  485. data/ext/ice/cpp/src/IceSSL/SecureTransportPluginI.cpp +80 -0
  486. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +137 -144
  487. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.h +25 -28
  488. data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.cpp +857 -0
  489. data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.h +46 -0
  490. data/ext/ice/cpp/src/IceSSL/TrustManager.cpp +9 -13
  491. data/ext/ice/cpp/src/IceSSL/TrustManager.h +4 -4
  492. data/ext/ice/cpp/src/IceSSL/TrustManagerF.h +3 -3
  493. data/ext/ice/cpp/src/IceSSL/UWPCertificateI.cpp +271 -0
  494. data/ext/ice/cpp/src/IceSSL/UWPEngine.cpp +343 -0
  495. data/ext/ice/cpp/src/IceSSL/UWPEngine.h +46 -0
  496. data/ext/ice/cpp/{include/Ice/ObjectFactoryManagerF.h → src/IceSSL/UWPEngineF.h} +13 -8
  497. data/ext/ice/cpp/src/IceSSL/UWPPluginI.cpp +94 -0
  498. data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.cpp +388 -0
  499. data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.h +76 -0
  500. data/ext/ice/cpp/src/IceSSL/Util.cpp +66 -1256
  501. data/ext/ice/cpp/src/IceSSL/Util.h +48 -137
  502. data/ext/ice/cpp/src/IceUtil/ConsoleUtil.cpp +162 -0
  503. data/ext/ice/cpp/src/IceUtil/ConvertUTF.cpp +22 -22
  504. data/ext/ice/cpp/src/IceUtil/ConvertUTF.h +34 -26
  505. data/ext/ice/cpp/src/IceUtil/CtrlCHandler.cpp +20 -31
  506. data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +25 -116
  507. data/ext/ice/cpp/src/IceUtil/InputUtil.cpp +1 -1
  508. data/ext/ice/cpp/src/IceUtil/MutexProtocol.cpp +1 -1
  509. data/ext/ice/cpp/src/IceUtil/Options.cpp +23 -46
  510. data/ext/ice/cpp/src/IceUtil/OutputUtil.cpp +7 -6
  511. data/ext/ice/cpp/src/IceUtil/Random.cpp +13 -13
  512. data/ext/ice/cpp/src/IceUtil/RecMutex.cpp +3 -9
  513. data/ext/ice/cpp/src/IceUtil/Shared.cpp +8 -3
  514. data/ext/ice/cpp/src/IceUtil/StringConverter.cpp +501 -264
  515. data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +540 -235
  516. data/ext/ice/cpp/src/IceUtil/ThreadException.cpp +37 -74
  517. data/ext/ice/cpp/src/IceUtil/Time.cpp +1 -1
  518. data/ext/ice/cpp/src/IceUtil/UUID.cpp +10 -10
  519. data/ext/ice/cpp/src/IceUtil/Unicode.cpp +98 -97
  520. data/ext/ice/cpp/src/IceUtil/Unicode.h +21 -35
  521. data/ext/ice/cpp/src/IceUtil/UtilException.cpp +838 -0
  522. data/ext/ice/cpp/src/Slice/CPlusPlusUtil.cpp +815 -163
  523. data/ext/ice/cpp/src/Slice/CPlusPlusUtil.h +76 -0
  524. data/ext/ice/cpp/src/Slice/Checksum.cpp +2 -2
  525. data/ext/ice/cpp/{include → src}/Slice/Checksum.h +2 -2
  526. data/ext/ice/cpp/src/Slice/FileTracker.cpp +25 -78
  527. data/ext/ice/cpp/{include → src}/Slice/FileTracker.h +9 -9
  528. data/ext/ice/cpp/src/Slice/Grammar.cpp +1994 -1943
  529. data/ext/ice/cpp/src/Slice/Grammar.h +44 -24
  530. data/ext/ice/cpp/src/Slice/GrammarUtil.h +14 -14
  531. data/ext/ice/cpp/src/Slice/JavaUtil.cpp +2658 -1927
  532. data/ext/ice/cpp/{include → src}/Slice/JavaUtil.h +178 -59
  533. data/ext/ice/cpp/src/Slice/MD5.cpp +1 -1
  534. data/ext/ice/cpp/src/Slice/MD5.h +1 -1
  535. data/ext/ice/cpp/src/Slice/MD5I.cpp +0 -1
  536. data/ext/ice/cpp/src/Slice/MD5I.h +1 -1
  537. data/ext/ice/cpp/src/Slice/PHPUtil.cpp +12 -15
  538. data/ext/ice/cpp/{include → src}/Slice/PHPUtil.h +6 -15
  539. data/ext/ice/cpp/src/Slice/Parser.cpp +802 -307
  540. data/ext/ice/cpp/{include → src}/Slice/Parser.h +76 -84
  541. data/ext/ice/cpp/src/Slice/Preprocessor.cpp +43 -21
  542. data/ext/ice/cpp/{include → src}/Slice/Preprocessor.h +7 -12
  543. data/ext/ice/cpp/src/Slice/Python.cpp +207 -86
  544. data/ext/ice/cpp/src/Slice/PythonUtil.cpp +683 -679
  545. data/ext/ice/cpp/{include → src}/Slice/PythonUtil.h +19 -8
  546. data/ext/ice/cpp/src/Slice/Ruby.cpp +38 -34
  547. data/ext/ice/cpp/src/Slice/RubyUtil.cpp +177 -445
  548. data/ext/ice/cpp/{include → src}/Slice/RubyUtil.h +6 -6
  549. data/ext/ice/cpp/src/Slice/Scanner.cpp +218 -306
  550. data/ext/ice/cpp/src/Slice/{Util.cpp → SliceUtil.cpp} +37 -64
  551. data/ext/ice/cpp/src/Slice/StringLiteralUtil.cpp +374 -0
  552. data/ext/ice/cpp/src/Slice/Util.h +54 -0
  553. data/ext/ice/mcpp/Makefile +5 -2
  554. data/ice.gemspec +2 -7
  555. data/lib/Glacier2.rb +1 -1
  556. data/lib/Glacier2/Metrics.rb +7 -46
  557. data/lib/Glacier2/PermissionsVerifier.rb +24 -95
  558. data/lib/Glacier2/PermissionsVerifierF.rb +3 -3
  559. data/lib/Glacier2/Router.rb +32 -74
  560. data/lib/Glacier2/RouterF.rb +3 -3
  561. data/lib/Glacier2/SSLInfo.rb +4 -7
  562. data/lib/Glacier2/Session.rb +88 -307
  563. data/lib/Ice.rb +83 -52
  564. data/lib/Ice/BuiltinSequences.rb +4 -4
  565. data/lib/Ice/Communicator.rb +56 -58
  566. data/lib/Ice/CommunicatorF.rb +3 -3
  567. data/lib/Ice/Connection.rb +153 -162
  568. data/lib/Ice/ConnectionF.rb +3 -3
  569. data/lib/Ice/Current.rb +4 -11
  570. data/lib/Ice/Endpoint.rb +57 -133
  571. data/lib/Ice/EndpointF.rb +3 -3
  572. data/lib/Ice/EndpointTypes.rb +3 -7
  573. data/lib/Ice/FacetMap.rb +4 -4
  574. data/lib/Ice/Identity.rb +5 -8
  575. data/lib/Ice/ImplicitContext.rb +5 -34
  576. data/lib/Ice/ImplicitContextF.rb +3 -3
  577. data/lib/Ice/Instrumentation.rb +23 -275
  578. data/lib/Ice/InstrumentationF.rb +3 -3
  579. data/lib/Ice/LocalException.rb +95 -141
  580. data/lib/Ice/Locator.rb +51 -165
  581. data/lib/Ice/LocatorF.rb +3 -3
  582. data/lib/Ice/Logger.rb +5 -34
  583. data/lib/Ice/LoggerF.rb +3 -3
  584. data/lib/Ice/Metrics.rb +61 -416
  585. data/lib/Ice/ObjectAdapter.rb +34 -0
  586. data/lib/Ice/ObjectAdapterF.rb +3 -3
  587. data/lib/Ice/ObjectFactory.rb +5 -30
  588. data/lib/Ice/Plugin.rb +7 -60
  589. data/lib/Ice/PluginF.rb +3 -3
  590. data/lib/Ice/Process.rb +16 -52
  591. data/lib/Ice/ProcessF.rb +3 -3
  592. data/lib/Ice/Properties.rb +5 -41
  593. data/lib/Ice/PropertiesAdmin.rb +19 -56
  594. data/lib/Ice/PropertiesF.rb +3 -3
  595. data/lib/Ice/RemoteLogger.rb +34 -115
  596. data/lib/Ice/Router.rb +29 -101
  597. data/lib/Ice/RouterF.rb +3 -3
  598. data/lib/Ice/ServantLocator.rb +31 -0
  599. data/lib/Ice/{ObjectFactoryF.rb → ServantLocatorF.rb} +6 -6
  600. data/lib/Ice/SliceChecksumDict.rb +3 -3
  601. data/lib/Ice/ValueFactory.rb +33 -0
  602. data/lib/Ice/Version.rb +5 -11
  603. data/lib/IceBox.rb +1 -1
  604. data/lib/IceBox/IceBox.rb +44 -148
  605. data/lib/IceGrid.rb +1 -4
  606. data/lib/IceGrid/Admin.rb +551 -427
  607. data/lib/IceGrid/Descriptor.rb +62 -529
  608. data/lib/IceGrid/Exception.rb +24 -45
  609. data/lib/IceGrid/FileParser.rb +14 -50
  610. data/lib/IceGrid/PluginFacade.rb +40 -0
  611. data/lib/IceGrid/Registry.rb +151 -58
  612. data/lib/IceGrid/Session.rb +25 -64
  613. data/lib/IceGrid/UserAccountMapper.rb +14 -50
  614. data/lib/IcePatch2.rb +1 -1
  615. data/lib/IcePatch2/FileInfo.rb +5 -11
  616. data/lib/IcePatch2/FileServer.rb +33 -76
  617. data/lib/IceStorm.rb +1 -1
  618. data/lib/IceStorm/IceStorm.rb +79 -206
  619. data/lib/IceStorm/Metrics.rb +11 -89
  620. data/slice/Glacier2/Metrics.ice +8 -4
  621. data/slice/Glacier2/PermissionsVerifier.ice +10 -7
  622. data/slice/Glacier2/PermissionsVerifierF.ice +7 -4
  623. data/slice/Glacier2/Router.ice +10 -8
  624. data/slice/Glacier2/RouterF.ice +7 -4
  625. data/slice/Glacier2/SSLInfo.ice +8 -5
  626. data/slice/Glacier2/Session.ice +15 -13
  627. data/slice/Ice/BuiltinSequences.ice +7 -4
  628. data/slice/Ice/Communicator.ice +141 -66
  629. data/slice/Ice/CommunicatorF.ice +7 -4
  630. data/slice/Ice/Connection.ice +183 -86
  631. data/slice/Ice/ConnectionF.ice +7 -4
  632. data/slice/Ice/Current.ice +13 -9
  633. data/slice/Ice/Endpoint.ice +63 -14
  634. data/slice/Ice/EndpointF.ice +7 -4
  635. data/slice/Ice/EndpointTypes.ice +8 -6
  636. data/slice/Ice/FacetMap.ice +7 -4
  637. data/slice/Ice/Identity.ice +13 -5
  638. data/slice/Ice/ImplicitContext.ice +20 -18
  639. data/slice/Ice/ImplicitContextF.ice +7 -4
  640. data/slice/Ice/Instrumentation.ice +20 -19
  641. data/slice/Ice/InstrumentationF.ice +8 -5
  642. data/slice/Ice/LocalException.ice +87 -87
  643. data/slice/Ice/Locator.ice +19 -18
  644. data/slice/Ice/LocatorF.ice +7 -4
  645. data/slice/Ice/Logger.ice +9 -7
  646. data/slice/Ice/LoggerF.ice +7 -4
  647. data/slice/Ice/Metrics.ice +18 -14
  648. data/slice/Ice/ObjectAdapter.ice +30 -13
  649. data/slice/Ice/ObjectAdapterF.ice +7 -4
  650. data/slice/Ice/ObjectFactory.ice +15 -12
  651. data/slice/Ice/Plugin.ice +9 -6
  652. data/slice/Ice/PluginF.ice +8 -5
  653. data/slice/Ice/Process.ice +9 -6
  654. data/slice/Ice/ProcessF.ice +7 -4
  655. data/slice/Ice/Properties.ice +15 -12
  656. data/slice/Ice/PropertiesAdmin.ice +9 -5
  657. data/slice/Ice/PropertiesF.ice +7 -4
  658. data/slice/Ice/RemoteLogger.ice +33 -24
  659. data/slice/Ice/Router.ice +16 -7
  660. data/slice/Ice/RouterF.ice +7 -4
  661. data/slice/Ice/ServantLocator.ice +13 -10
  662. data/slice/Ice/ServantLocatorF.ice +7 -4
  663. data/slice/Ice/SliceChecksumDict.ice +7 -4
  664. data/slice/Ice/ValueFactory.ice +127 -0
  665. data/slice/Ice/Version.ice +9 -5
  666. data/slice/IceBT/ConnectionInfo.ice +53 -0
  667. data/slice/IceBT/EndpointInfo.ice +51 -0
  668. data/slice/IceBT/Types.ice +39 -0
  669. data/slice/IceBox/IceBox.ice +20 -21
  670. data/slice/IceDiscovery/IceDiscovery.ice +9 -5
  671. data/slice/IceGrid/Admin.ice +390 -30
  672. data/slice/IceGrid/Descriptor.ice +37 -29
  673. data/slice/IceGrid/Exception.ice +33 -27
  674. data/slice/IceGrid/FileParser.ice +9 -6
  675. data/slice/IceGrid/PluginFacade.ice +11 -9
  676. data/slice/IceGrid/Registry.ice +139 -16
  677. data/slice/IceGrid/Session.ice +10 -8
  678. data/slice/IceGrid/UserAccountMapper.ice +9 -6
  679. data/slice/IceIAP/ConnectionInfo.ice +70 -0
  680. data/slice/IceIAP/EndpointInfo.ice +64 -0
  681. data/slice/IceLocatorDiscovery/IceLocatorDiscovery.ice +9 -7
  682. data/slice/IcePatch2/FileInfo.ice +9 -8
  683. data/slice/IcePatch2/FileServer.ice +17 -13
  684. data/slice/IceSSL/ConnectionInfo.ice +14 -17
  685. data/slice/IceSSL/ConnectionInfoF.ice +24 -0
  686. data/slice/IceSSL/EndpointInfo.ice +9 -30
  687. data/slice/IceStorm/IceStorm.ice +22 -18
  688. data/slice/IceStorm/Metrics.ice +9 -5
  689. metadata +154 -120
  690. data/ext/ObjectFactory.cpp +0 -140
  691. data/ext/ObjectFactory.h +0 -50
  692. data/ext/ice/cpp/include/Ice/BasicStream.h +0 -1335
  693. data/ext/ice/cpp/include/Ice/Communicator.h +0 -200
  694. data/ext/ice/cpp/include/Ice/Connection.h +0 -497
  695. data/ext/ice/cpp/include/Ice/DeprecatedStringConverter.h +0 -62
  696. data/ext/ice/cpp/include/Ice/Endpoint.h +0 -341
  697. data/ext/ice/cpp/include/Ice/Identity.h +0 -168
  698. data/ext/ice/cpp/include/Ice/Instrumentation.h +0 -365
  699. data/ext/ice/cpp/include/Ice/LocalException.h +0 -1030
  700. data/ext/ice/cpp/include/Ice/Locator.h +0 -2193
  701. data/ext/ice/cpp/include/Ice/Metrics.h +0 -2974
  702. data/ext/ice/cpp/include/Ice/ObjectAdapter.h +0 -168
  703. data/ext/ice/cpp/include/Ice/ObjectFactory.h +0 -92
  704. data/ext/ice/cpp/include/Ice/ObjectFactoryF.h +0 -66
  705. data/ext/ice/cpp/include/Ice/Outgoing.h +0 -225
  706. data/ext/ice/cpp/include/Ice/Plugin.h +0 -125
  707. data/ext/ice/cpp/include/Ice/Process.h +0 -574
  708. data/ext/ice/cpp/include/Ice/PropertiesAdmin.h +0 -830
  709. data/ext/ice/cpp/include/Ice/RemoteLogger.h +0 -1500
  710. data/ext/ice/cpp/include/Ice/Router.h +0 -1159
  711. data/ext/ice/cpp/include/Ice/Stream.h +0 -447
  712. data/ext/ice/cpp/include/Ice/StreamF.h +0 -30
  713. data/ext/ice/cpp/include/Ice/Version.h +0 -262
  714. data/ext/ice/cpp/include/IceSSL/ConnectionInfo.h +0 -158
  715. data/ext/ice/cpp/include/IceSSL/EndpointInfo.h +0 -142
  716. data/ext/ice/cpp/include/IceUtil/AbstractMutex.h +0 -119
  717. data/ext/ice/cpp/include/IceUtil/Cache.h +0 -362
  718. data/ext/ice/cpp/include/Slice/CPlusPlusUtil.h +0 -65
  719. data/ext/ice/cpp/include/Slice/CsUtil.h +0 -92
  720. data/ext/ice/cpp/include/Slice/DotNetNames.h +0 -34
  721. data/ext/ice/cpp/include/Slice/ObjCUtil.h +0 -127
  722. data/ext/ice/cpp/include/Slice/Util.h +0 -56
  723. data/ext/ice/cpp/src/Ice/BasicStream.cpp +0 -3428
  724. data/ext/ice/cpp/src/Ice/DeprecatedStringConverter.cpp +0 -62
  725. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.cpp +0 -139
  726. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.h +0 -43
  727. data/ext/ice/cpp/src/Ice/Outgoing.cpp +0 -694
  728. data/ext/ice/cpp/src/Ice/Stream.cpp +0 -53
  729. data/ext/ice/cpp/src/Ice/StreamI.cpp +0 -832
  730. data/ext/ice/cpp/src/Ice/StreamI.h +0 -198
  731. data/ext/ice/cpp/src/IceSSL/Certificate.cpp +0 -1336
  732. data/ext/ice/cpp/src/IceUtil/Exception.cpp +0 -792
  733. data/ext/ice/cpp/src/IceUtil/FileUtil.h +0 -185
  734. data/ext/ice/cpp/src/Slice/CsUtil.cpp +0 -2660
  735. data/ext/ice/cpp/src/Slice/DotNetNames.cpp +0 -146
  736. data/ext/ice/cpp/src/Slice/ObjCUtil.cpp +0 -1310
  737. data/lib/IceGrid/Locator.rb +0 -106
  738. data/lib/IceGrid/Observer.rb +0 -572
  739. data/lib/IceGrid/Query.rb +0 -169
  740. data/slice/Freeze/BackgroundSaveEvictor.ice +0 -111
  741. data/slice/Freeze/CatalogData.ice +0 -49
  742. data/slice/Freeze/Connection.ice +0 -121
  743. data/slice/Freeze/DB.ice +0 -37
  744. data/slice/Freeze/Evictor.ice +0 -346
  745. data/slice/Freeze/EvictorF.ice +0 -22
  746. data/slice/Freeze/EvictorStorage.ice +0 -72
  747. data/slice/Freeze/Exception.ice +0 -100
  748. data/slice/Freeze/Transaction.ice +0 -58
  749. data/slice/Freeze/TransactionalEvictor.ice +0 -50
  750. data/slice/IceGrid/Locator.ice +0 -57
  751. data/slice/IceGrid/Observer.ice +0 -395
  752. data/slice/IceGrid/Query.ice +0 -131
@@ -1,13 +1,13 @@
1
1
  // **********************************************************************
2
2
  //
3
- // Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
3
+ // Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
4
4
  //
5
5
  // This copy of Ice is licensed to you under the terms described in the
6
6
  // ICE_LICENSE file included in this distribution.
7
7
  //
8
8
  // **********************************************************************
9
9
 
10
- #ifdef __sun
10
+ #ifdef __sun
11
11
  //
12
12
  // Solaris 10 bug: it's supposed to be defined in pthread.h
13
13
  //
@@ -19,10 +19,11 @@
19
19
  #include <IceUtil/Thread.h>
20
20
  #include <IceUtil/Time.h>
21
21
  #include <IceUtil/ThreadException.h>
22
+ #include <Ice/ConsoleUtil.h>
22
23
  #include <climits>
23
24
  #include <exception>
24
25
 
25
- #ifdef ICE_OS_WINRT
26
+ #ifdef ICE_OS_UWP
26
27
  # include <thread>
27
28
  #endif
28
29
 
@@ -32,8 +33,9 @@
32
33
  #endif
33
34
 
34
35
  using namespace std;
36
+ using namespace IceInternal;
35
37
 
36
- #ifdef ICE_OS_WINRT
38
+ #ifdef ICE_OS_UWP
37
39
 
38
40
  IceUtil::ThreadControl::ThreadControl() :
39
41
  _id(this_thread::get_id())
@@ -83,7 +85,7 @@ IceUtil::ThreadControl::detach()
83
85
  {
84
86
  throw BadThreadControlException(__FILE__, __LINE__);
85
87
  }
86
-
88
+
87
89
  try
88
90
  {
89
91
  _thread->detach();
@@ -169,13 +171,13 @@ WINAPI startHook(void* arg)
169
171
  {
170
172
  if(!thread->name().empty())
171
173
  {
172
- cerr << thread->name() << " terminating" << endl;
174
+ consoleErr << thread->name() << " terminating" << endl;
173
175
  }
174
176
  std::terminate();
175
177
  }
176
178
 
177
179
  thread->_done();
178
-
180
+
179
181
  return 0;
180
182
  }
181
183
 
@@ -216,7 +218,7 @@ IceUtil::Thread::start(size_t, int)
216
218
 
217
219
  _started = true;
218
220
  _running = true;
219
-
221
+
220
222
  return ThreadControl(_thread);
221
223
  }
222
224
 
@@ -237,12 +239,6 @@ IceUtil::Thread::operator==(const Thread& rhs) const
237
239
  return this == &rhs;
238
240
  }
239
241
 
240
- bool
241
- IceUtil::Thread::operator!=(const Thread& rhs) const
242
- {
243
- return this != &rhs;
244
- }
245
-
246
242
  bool
247
243
  IceUtil::Thread::operator<(const Thread& rhs) const
248
244
  {
@@ -308,7 +304,7 @@ IceUtil::ThreadControl::join()
308
304
  {
309
305
  throw ThreadSyscallException(__FILE__, __LINE__, GetLastError());
310
306
  }
311
-
307
+
312
308
  detach();
313
309
  }
314
310
 
@@ -319,7 +315,7 @@ IceUtil::ThreadControl::detach()
319
315
  {
320
316
  throw BadThreadControlException(__FILE__, __LINE__);
321
317
  }
322
-
318
+
323
319
  if(CloseHandle(_handle) == 0)
324
320
  {
325
321
  throw ThreadSyscallException(__FILE__, __LINE__, GetLastError());
@@ -410,13 +406,13 @@ WINAPI startHook(void* arg)
410
406
  {
411
407
  if(!thread->name().empty())
412
408
  {
413
- cerr << thread->name() << " terminating" << endl;
409
+ consoleErr << thread->name() << " terminating" << endl;
414
410
  }
415
411
  std::terminate();
416
412
  }
417
413
 
418
414
  thread->_done();
419
-
415
+
420
416
  return 0;
421
417
  }
422
418
 
@@ -453,14 +449,14 @@ IceUtil::Thread::start(size_t stackSize, int priority)
453
449
  // __decRef().
454
450
  //
455
451
  __incRef();
456
-
452
+
457
453
  unsigned int id;
458
- _handle =
454
+ _handle =
459
455
  reinterpret_cast<HANDLE>(
460
- _beginthreadex(0,
461
- static_cast<unsigned int>(stackSize),
462
- startHook, this,
463
- CREATE_SUSPENDED,
456
+ _beginthreadex(0,
457
+ static_cast<unsigned int>(stackSize),
458
+ startHook, this,
459
+ CREATE_SUSPENDED,
464
460
  &id));
465
461
  _id = id;
466
462
  assert(_handle != (HANDLE)-1L);
@@ -481,7 +477,7 @@ IceUtil::Thread::start(size_t stackSize, int priority)
481
477
 
482
478
  _started = true;
483
479
  _running = true;
484
-
480
+
485
481
  return ThreadControl(_handle, _id);
486
482
  }
487
483
 
@@ -502,12 +498,6 @@ IceUtil::Thread::operator==(const Thread& rhs) const
502
498
  return this == &rhs;
503
499
  }
504
500
 
505
- bool
506
- IceUtil::Thread::operator!=(const Thread& rhs) const
507
- {
508
- return this != &rhs;
509
- }
510
-
511
501
  bool
512
502
  IceUtil::Thread::operator<(const Thread& rhs) const
513
503
  {
@@ -635,7 +625,7 @@ IceUtil::Thread::~Thread()
635
625
  {
636
626
  }
637
627
 
638
- extern "C"
628
+ extern "C"
639
629
  {
640
630
  static void*
641
631
  startHook(void* arg)
@@ -662,18 +652,17 @@ startHook(void* arg)
662
652
  {
663
653
  if(!thread->name().empty())
664
654
  {
665
- cerr << thread->name() << " terminating" << endl;
655
+ consoleErr << thread->name() << " terminating" << endl;
666
656
  }
667
657
  std::terminate();
668
658
  }
669
659
 
670
660
  thread->_done();
671
-
661
+
672
662
  return 0;
673
663
  }
674
664
  }
675
665
 
676
-
677
666
  IceUtil::ThreadControl
678
667
  IceUtil::Thread::start(size_t stackSize)
679
668
  {
@@ -789,12 +778,6 @@ IceUtil::Thread::operator==(const Thread& rhs) const
789
778
  return this == &rhs;
790
779
  }
791
780
 
792
- bool
793
- IceUtil::Thread::operator!=(const Thread& rhs) const
794
- {
795
- return this != &rhs;
796
- }
797
-
798
781
  bool
799
782
  IceUtil::Thread::operator<(const Thread& rhs) const
800
783
  {
@@ -1,6 +1,6 @@
1
1
  // **********************************************************************
2
2
  //
3
- // Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
3
+ // Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
4
4
  //
5
5
  // This copy of Ice is licensed to you under the terms described in the
6
6
  // ICE_LICENSE file included in this distribution.
@@ -18,8 +18,8 @@
18
18
  #include <Ice/Properties.h>
19
19
  #include <Ice/TraceLevels.h>
20
20
 
21
- #if defined(ICE_OS_WINRT)
22
- # include <IceUtil/StringConverter.h>
21
+ #if defined(ICE_OS_UWP)
22
+ # include <Ice/StringConverter.h>
23
23
  #endif
24
24
 
25
25
  using namespace std;
@@ -70,6 +70,14 @@ public:
70
70
  execute(ThreadPoolCurrent& current)
71
71
  {
72
72
  _handler->finished(current, _close);
73
+
74
+ //
75
+ // Break cyclic reference count.
76
+ //
77
+ if(_handler->getNativeInfo())
78
+ {
79
+ _handler->getNativeInfo()->setReadyCallback(0);
80
+ }
73
81
  }
74
82
 
75
83
  private:
@@ -99,29 +107,6 @@ private:
99
107
  IceUtil::ThreadPtr _thread;
100
108
  };
101
109
 
102
- class InterruptWorkItem : public ThreadPoolWorkItem
103
- {
104
- public:
105
-
106
- virtual void
107
- execute(ThreadPoolCurrent& current)
108
- {
109
- // Nothing to do, this is just used to interrupt the thread pool selector.
110
- }
111
- };
112
- ThreadPoolWorkItemPtr interruptWorkItem;
113
-
114
- class InterruptWorkItemInit
115
- {
116
- public:
117
-
118
- InterruptWorkItemInit()
119
- {
120
- interruptWorkItem = new InterruptWorkItem;
121
- }
122
- };
123
- InterruptWorkItemInit init;
124
-
125
110
  //
126
111
  // Exception raised by the thread pool work queue when the thread pool
127
112
  // is destroyed.
@@ -132,6 +117,16 @@ class ThreadPoolDestroyedException
132
117
 
133
118
  }
134
119
 
120
+ Ice::DispatcherCall::~DispatcherCall()
121
+ {
122
+ // Out of line to avoid weak vtable
123
+ }
124
+
125
+ Ice::Dispatcher::~Dispatcher()
126
+ {
127
+ // Out of line to avoid weak vtable
128
+ }
129
+
135
130
  IceInternal::DispatchWorkItem::DispatchWorkItem()
136
131
  {
137
132
  }
@@ -147,81 +142,42 @@ IceInternal::DispatchWorkItem::execute(ThreadPoolCurrent& current)
147
142
  current.dispatchFromThisThread(this);
148
143
  }
149
144
 
150
- IceInternal::ThreadPoolWorkQueue::ThreadPoolWorkQueue(const InstancePtr& instance, Selector& selector) :
151
- _instance(instance),
152
- _selector(selector),
145
+ IceInternal::ThreadPoolWorkQueue::ThreadPoolWorkQueue(ThreadPool& threadPool) :
146
+ _threadPool(threadPool),
153
147
  _destroyed(false)
154
- #ifdef ICE_USE_IOCP
155
- , _info(SocketOperationRead)
156
- #endif
157
148
  {
158
- #if !defined(ICE_USE_IOCP) && !defined(ICE_OS_WINRT)
159
- SOCKET fds[2];
160
- createPipe(fds);
161
- _fdIntrRead = fds[0];
162
- _fdIntrWrite = fds[1];
163
-
164
- _selector.initialize(this);
165
- _selector.update(this, SocketOperationNone, SocketOperationRead);
166
- #endif
167
- }
168
-
169
- IceInternal::ThreadPoolWorkQueue::~ThreadPoolWorkQueue()
170
- {
171
- assert(_destroyed);
172
-
173
- #if !defined(ICE_USE_IOCP) && !defined(ICE_OS_WINRT)
174
- try
175
- {
176
- closeSocket(_fdIntrRead);
177
- }
178
- catch(const LocalException& ex)
179
- {
180
- Error out(_instance->initializationData().logger);
181
- out << "exception in selector while calling closeSocket():\n" << ex;
182
- }
183
-
184
- try
185
- {
186
- closeSocket(_fdIntrWrite);
187
- }
188
- catch(const LocalException& ex)
189
- {
190
- Error out(_instance->initializationData().logger);
191
- out << "exception in selector while calling closeSocket():\n" << ex;
192
- }
193
- #endif
149
+ _registered = SocketOperationRead;
194
150
  }
195
151
 
196
152
  void
197
153
  IceInternal::ThreadPoolWorkQueue::destroy()
198
154
  {
199
- Lock sync(*this);
155
+ //Lock sync(*this); Called with the thread pool locked
200
156
  assert(!_destroyed);
201
157
  _destroyed = true;
202
- postMessage();
158
+ #if defined(ICE_USE_IOCP) || defined(ICE_OS_UWP)
159
+ _threadPool._selector.completed(this, SocketOperationRead);
160
+ #else
161
+ _threadPool._selector.ready(this, SocketOperationRead, true);
162
+ #endif
203
163
  }
204
164
 
205
165
  void
206
166
  IceInternal::ThreadPoolWorkQueue::queue(const ThreadPoolWorkItemPtr& item)
207
167
  {
208
- Lock sync(*this);
209
- if(_destroyed)
210
- {
211
- throw CommunicatorDestroyedException(__FILE__, __LINE__);
212
- }
168
+ //Lock sync(*this); Called with the thread pool locked
213
169
  _workItems.push_back(item);
214
- #if !defined(ICE_USE_IOCP) && !defined(ICE_OS_WINRT)
170
+ #if defined(ICE_USE_IOCP) || defined(ICE_OS_UWP)
171
+ _threadPool._selector.completed(this, SocketOperationRead);
172
+ #else
215
173
  if(_workItems.size() == 1)
216
174
  {
217
- postMessage();
175
+ _threadPool._selector.ready(this, SocketOperationRead, true);
218
176
  }
219
- #else
220
- postMessage();
221
177
  #endif
222
178
  }
223
179
 
224
- #if defined(ICE_USE_IOCP) || defined(ICE_OS_WINRT)
180
+ #if defined(ICE_USE_IOCP) || defined(ICE_OS_UWP)
225
181
  bool
226
182
  IceInternal::ThreadPoolWorkQueue::startAsync(SocketOperation)
227
183
  {
@@ -242,47 +198,24 @@ IceInternal::ThreadPoolWorkQueue::message(ThreadPoolCurrent& current)
242
198
  {
243
199
  ThreadPoolWorkItemPtr workItem;
244
200
  {
245
- Lock sync(*this);
201
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_threadPool);
246
202
  if(!_workItems.empty())
247
203
  {
248
204
  workItem = _workItems.front();
249
205
  _workItems.pop_front();
250
-
251
- #if !defined(ICE_USE_IOCP) && !defined(ICE_OS_WINRT)
252
- if(_workItems.empty())
253
- {
254
- char c;
255
- while(true)
256
- {
257
- ssize_t ret;
258
- # ifdef _WIN32
259
- ret = ::recv(_fdIntrRead, &c, 1, 0);
260
- # else
261
- ret = ::read(_fdIntrRead, &c, 1);
262
- # endif
263
- if(ret == SOCKET_ERROR)
264
- {
265
- if(interrupted())
266
- {
267
- continue;
268
- }
269
-
270
- SocketException ex(__FILE__, __LINE__);
271
- ex.error = getSocketErrno();
272
- throw ex;
273
- }
274
- break;
275
- }
276
- }
277
- #endif
278
206
  }
207
+ #if defined(ICE_USE_IOCP) || defined(ICE_OS_UWP)
279
208
  else
280
209
  {
281
210
  assert(_destroyed);
282
- #if defined(ICE_USE_IOCP) || defined(ICE_OS_WINRT)
283
- postMessage();
284
- #endif
211
+ _threadPool._selector.completed(this, SocketOperationRead);
285
212
  }
213
+ #else
214
+ if(_workItems.empty() && !_destroyed)
215
+ {
216
+ _threadPool._selector.ready(this, SocketOperationRead, false);
217
+ }
218
+ #endif
286
219
  }
287
220
 
288
221
  if(workItem)
@@ -291,6 +224,7 @@ IceInternal::ThreadPoolWorkQueue::message(ThreadPoolCurrent& current)
291
224
  }
292
225
  else
293
226
  {
227
+ assert(_destroyed);
294
228
  current.ioCompleted();
295
229
  throw ThreadPoolDestroyedException();
296
230
  }
@@ -311,47 +245,7 @@ IceInternal::ThreadPoolWorkQueue::toString() const
311
245
  NativeInfoPtr
312
246
  IceInternal::ThreadPoolWorkQueue::getNativeInfo()
313
247
  {
314
- #if !defined(ICE_USE_IOCP) && !defined(ICE_OS_WINRT)
315
- return new NativeInfo(_fdIntrRead);
316
- #else
317
248
  return 0;
318
- #endif
319
- }
320
-
321
- void
322
- IceInternal::ThreadPoolWorkQueue::postMessage()
323
- {
324
- #if defined(ICE_USE_IOCP)
325
- if(!PostQueuedCompletionStatus(_selector.getIOCPHandle(), 0, reinterpret_cast<ULONG_PTR>(this), &_info))
326
- {
327
- SocketException ex(__FILE__, __LINE__);
328
- ex.error = GetLastError();
329
- throw ex;
330
- }
331
- #elif defined(ICE_OS_WINRT)
332
- _selector.completed(this, SocketOperationRead);
333
- #else
334
- char c = 0;
335
- while(true)
336
- {
337
- # ifdef _WIN32
338
- if(::send(_fdIntrWrite, &c, 1, 0) == SOCKET_ERROR)
339
- # else
340
- if(::write(_fdIntrWrite, &c, 1) == SOCKET_ERROR)
341
- # endif
342
- {
343
- if(interrupted())
344
- {
345
- continue;
346
- }
347
-
348
- SocketException ex(__FILE__, __LINE__);
349
- ex.error = getSocketErrno();
350
- throw ex;
351
- }
352
- break;
353
- }
354
- #endif
355
249
  }
356
250
 
357
251
  IceInternal::ThreadPool::ThreadPool(const InstancePtr& instance, const string& prefix, int timeout) :
@@ -372,14 +266,14 @@ IceInternal::ThreadPool::ThreadPool(const InstancePtr& instance, const string& p
372
266
  _threadIdleTime(0),
373
267
  _stackSize(0),
374
268
  _inUse(0),
375
- #if !defined(ICE_USE_IOCP) && !defined(ICE_OS_WINRT)
269
+ #if !defined(ICE_USE_IOCP) && !defined(ICE_OS_UWP)
376
270
  _inUseIO(0),
377
271
  _nextHandler(_handlers.end()),
378
272
  #endif
379
273
  _promote(true)
380
274
  {
381
275
  PropertiesPtr properties = _instance->initializationData().properties;
382
- #ifndef ICE_OS_WINRT
276
+ #ifndef ICE_OS_UWP
383
277
  # ifdef _WIN32
384
278
  SYSTEM_INFO sysInfo;
385
279
  GetSystemInfo(&sysInfo);
@@ -403,7 +297,7 @@ IceInternal::ThreadPool::ThreadPool(const InstancePtr& instance, const string& p
403
297
  }
404
298
 
405
299
  int sizeMax = properties->getPropertyAsIntWithDefault(_prefix + ".SizeMax", size);
406
- #ifndef ICE_OS_WINRT
300
+ #ifndef ICE_OS_UWP
407
301
  if(sizeMax == -1)
408
302
  {
409
303
  sizeMax = nProcessors;
@@ -441,7 +335,7 @@ IceInternal::ThreadPool::ThreadPool(const InstancePtr& instance, const string& p
441
335
  const_cast<int&>(_size) = size;
442
336
  const_cast<int&>(_sizeMax) = sizeMax;
443
337
  const_cast<int&>(_sizeWarn) = sizeWarn;
444
- #ifndef ICE_OS_WINRT
338
+ #ifndef ICE_OS_UWP
445
339
  const_cast<int&>(_sizeIO) = min(sizeMax, nProcessors);
446
340
  #else
447
341
  const_cast<int&>(_sizeIO) = sizeMax;
@@ -452,7 +346,16 @@ IceInternal::ThreadPool::ThreadPool(const InstancePtr& instance, const string& p
452
346
  _selector.setup(_sizeIO);
453
347
  #endif
454
348
 
455
- int stackSize = properties->getPropertyAsInt(_prefix + ".StackSize");
349
+ #if defined(__APPLE__)
350
+ //
351
+ // We use a default stack size of 1MB on macOS and the new C++11 mapping to allow transmitting
352
+ // class graphs with a depth of 100 (maximum default), 512KB is not enough otherwise.
353
+ //
354
+ int defaultStackSize = 1024 * 1024; // 1MB
355
+ #else
356
+ int defaultStackSize = 0;
357
+ #endif
358
+ int stackSize = properties->getPropertyAsIntWithDefault(_prefix + ".StackSize", defaultStackSize);
456
359
  if(stackSize < 0)
457
360
  {
458
361
  Warning out(_instance->initializationData().logger);
@@ -469,7 +372,8 @@ IceInternal::ThreadPool::ThreadPool(const InstancePtr& instance, const string& p
469
372
  const_cast<int&>(_priority) = properties->getPropertyAsInt("Ice.ThreadPriority");
470
373
  }
471
374
 
472
- _workQueue = new ThreadPoolWorkQueue(_instance, _selector);
375
+ _workQueue = ICE_MAKE_SHARED(ThreadPoolWorkQueue, *this);
376
+ _selector.initialize(_workQueue.get());
473
377
 
474
378
  if(_instance->traceLevels()->threadPool >= 1)
475
379
  {
@@ -528,7 +432,6 @@ IceInternal::ThreadPool::destroy()
528
432
  {
529
433
  return;
530
434
  }
531
-
532
435
  _destroyed = true;
533
436
  _workQueue->destroy();
534
437
  }
@@ -549,6 +452,28 @@ IceInternal::ThreadPool::initialize(const EventHandlerPtr& handler)
549
452
  Lock sync(*this);
550
453
  assert(!_destroyed);
551
454
  _selector.initialize(handler.get());
455
+
456
+ class ReadyCallbackI : public ReadyCallback
457
+ {
458
+ public:
459
+
460
+ ReadyCallbackI(const ThreadPoolPtr& threadPool, const EventHandlerPtr& handler) :
461
+ _threadPool(threadPool), _handler(handler)
462
+ {
463
+ }
464
+
465
+ virtual void
466
+ ready(SocketOperation op, bool value)
467
+ {
468
+ _threadPool->ready(_handler, op, value);
469
+ }
470
+
471
+ private:
472
+
473
+ const ThreadPoolPtr _threadPool;
474
+ const EventHandlerPtr _handler;
475
+ };
476
+ handler->getNativeInfo()->setReadyCallback(new ReadyCallbackI(this, handler));
552
477
  }
553
478
 
554
479
  void
@@ -569,20 +494,6 @@ IceInternal::ThreadPool::update(const EventHandlerPtr& handler, SocketOperation
569
494
  }
570
495
 
571
496
  _selector.update(handler.get(), remove, add);
572
- #if !defined(ICE_USE_IOCP) && !defined(ICE_OS_WINRT)
573
- if(add & SocketOperationRead && handler->_hasMoreData && !(handler->_disabled & SocketOperationRead))
574
- {
575
- if(_pendingHandlers.empty())
576
- {
577
- _workQueue->queue(interruptWorkItem); // Interrupt select()
578
- }
579
- _pendingHandlers.insert(handler.get());
580
- }
581
- else if(remove & SocketOperationRead)
582
- {
583
- _pendingHandlers.erase(handler.get());
584
- }
585
- #endif
586
497
  }
587
498
 
588
499
  bool
@@ -590,9 +501,8 @@ IceInternal::ThreadPool::finish(const EventHandlerPtr& handler, bool closeNow)
590
501
  {
591
502
  Lock sync(*this);
592
503
  assert(!_destroyed);
593
- #if !defined(ICE_USE_IOCP) && !defined(ICE_OS_WINRT)
504
+ #if !defined(ICE_USE_IOCP) && !defined(ICE_OS_UWP)
594
505
  closeNow = _selector.finish(handler.get(), closeNow); // This must be called before!
595
- _pendingHandlers.erase(handler.get());
596
506
  _workQueue->queue(new FinishedWorkItem(handler, !closeNow));
597
507
  return closeNow;
598
508
  #else
@@ -610,6 +520,17 @@ IceInternal::ThreadPool::finish(const EventHandlerPtr& handler, bool closeNow)
610
520
  #endif
611
521
  }
612
522
 
523
+ void
524
+ IceInternal::ThreadPool::ready(const EventHandlerPtr& handler, SocketOperation op, bool value)
525
+ {
526
+ Lock sync(*this);
527
+ if(_destroyed)
528
+ {
529
+ return;
530
+ }
531
+ _selector.ready(handler.get(), op, value);
532
+ }
533
+
613
534
  void
614
535
  IceInternal::ThreadPool::dispatchFromThisThread(const DispatchWorkItemPtr& workItem)
615
536
  {
@@ -617,7 +538,15 @@ IceInternal::ThreadPool::dispatchFromThisThread(const DispatchWorkItemPtr& workI
617
538
  {
618
539
  try
619
540
  {
541
+ #ifdef ICE_CPP11_MAPPING
542
+ _dispatcher([workItem]()
543
+ {
544
+ workItem->run();
545
+ },
546
+ workItem->getConnection());
547
+ #else
620
548
  _dispatcher->dispatch(workItem, workItem->getConnection());
549
+ #endif
621
550
  }
622
551
  catch(const std::exception& ex)
623
552
  {
@@ -645,6 +574,11 @@ IceInternal::ThreadPool::dispatchFromThisThread(const DispatchWorkItemPtr& workI
645
574
  void
646
575
  IceInternal::ThreadPool::dispatch(const DispatchWorkItemPtr& workItem)
647
576
  {
577
+ Lock sync(*this);
578
+ if(_destroyed)
579
+ {
580
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
581
+ }
648
582
  _workQueue->queue(workItem);
649
583
  }
650
584
 
@@ -663,10 +597,6 @@ IceInternal::ThreadPool::joinWithAllThreads()
663
597
  {
664
598
  (*p)->getThreadControl().join();
665
599
  }
666
-
667
- #if !defined(ICE_USE_IOCP) && !defined(ICE_OS_WINRT)
668
- _selector.finish(_workQueue.get(), true);
669
- #endif
670
600
  _selector.destroy();
671
601
  }
672
602
 
@@ -679,10 +609,9 @@ IceInternal::ThreadPool::prefix() const
679
609
  void
680
610
  IceInternal::ThreadPool::run(const EventHandlerThreadPtr& thread)
681
611
  {
682
- #if !defined(ICE_USE_IOCP) && !defined(ICE_OS_WINRT)
612
+ #if !defined(ICE_USE_IOCP) && !defined(ICE_OS_UWP)
683
613
  ThreadPoolCurrent current(_instance, this, thread);
684
614
  bool select = false;
685
- vector<pair<EventHandler*, SocketOperation> > handlers;
686
615
  while(true)
687
616
  {
688
617
  if(current._handler)
@@ -711,7 +640,7 @@ IceInternal::ThreadPool::run(const EventHandlerThreadPtr& thread)
711
640
  {
712
641
  try
713
642
  {
714
- _selector.select(handlers, _serverIdleTime);
643
+ _selector.select(_serverIdleTime);
715
644
  }
716
645
  catch(const SelectorTimeoutException&)
717
646
  {
@@ -730,22 +659,8 @@ IceInternal::ThreadPool::run(const EventHandlerThreadPtr& thread)
730
659
  {
731
660
  if(select)
732
661
  {
733
- _handlers.swap(handlers);
734
- if(!_pendingHandlers.empty())
735
- {
736
- for(_nextHandler = _handlers.begin(); _nextHandler != _handlers.end(); ++_nextHandler)
737
- {
738
- _pendingHandlers.erase(_nextHandler->first);
739
- }
740
- set<EventHandler*>::const_iterator p;
741
- for(p = _pendingHandlers.begin(); p != _pendingHandlers.end(); ++p)
742
- {
743
- _handlers.push_back(make_pair(*p, SocketOperationRead));
744
- }
745
- _pendingHandlers.clear();
746
- }
662
+ _selector.finishSelect(_handlers);
747
663
  _nextHandler = _handlers.begin();
748
- _selector.finishSelect();
749
664
  select = false;
750
665
  }
751
666
  else if(!current._leader && followerWait(current))
@@ -762,14 +677,6 @@ IceInternal::ThreadPool::run(const EventHandlerThreadPtr& thread)
762
677
  // the IO thread count now.
763
678
  //
764
679
  --_inUseIO;
765
- if(current._handler->_hasMoreData && current._handler->_registered & SocketOperationRead)
766
- {
767
- if(_pendingHandlers.empty())
768
- {
769
- _workQueue->queue(interruptWorkItem); // Interrupt select()
770
- }
771
- _pendingHandlers.insert(current._handler.get());
772
- }
773
680
  }
774
681
  else
775
682
  {
@@ -780,14 +687,6 @@ IceInternal::ThreadPool::run(const EventHandlerThreadPtr& thread)
780
687
  if(_serialize && current._handler.get() != _workQueue.get())
781
688
  {
782
689
  _selector.enable(current._handler.get(), current.operation);
783
- if(current._handler->_hasMoreData && current._handler->_registered & SocketOperationRead)
784
- {
785
- if(_pendingHandlers.empty())
786
- {
787
- _workQueue->queue(interruptWorkItem); // Interrupt select()
788
- }
789
- _pendingHandlers.insert(current._handler.get());
790
- }
791
690
  }
792
691
  assert(_inUse > 0);
793
692
  --_inUse;
@@ -798,29 +697,22 @@ IceInternal::ThreadPool::run(const EventHandlerThreadPtr& thread)
798
697
  return; // Wait timed-out.
799
698
  }
800
699
  }
801
- else if(current._handler->_hasMoreData && current._handler->_registered & SocketOperationRead)
802
- {
803
- if(_pendingHandlers.empty())
804
- {
805
- _workQueue->queue(interruptWorkItem); // Interrupt select()
806
- }
807
- _pendingHandlers.insert(current._handler.get());
808
- }
809
700
 
810
701
  //
811
702
  // Get the next ready handler.
812
703
  //
813
- while(_nextHandler != _handlers.end() && !(_nextHandler->second & _nextHandler->first->_registered))
704
+ while(_nextHandler != _handlers.end() &&
705
+ !(_nextHandler->second & ~_nextHandler->first->_disabled & _nextHandler->first->_registered))
814
706
  {
815
707
  ++_nextHandler;
816
708
  }
817
709
  if(_nextHandler != _handlers.end())
818
710
  {
819
711
  current._ioCompleted = false;
820
- current._handler = _nextHandler->first;
712
+ current._handler = ICE_GET_SHARED_FROM_THIS(_nextHandler->first);
821
713
  current.operation = _nextHandler->second;
822
714
  ++_nextHandler;
823
- thread->setState(ThreadStateInUseForIO);
715
+ thread->setState(ICE_ENUM(ThreadState, ThreadStateInUseForIO));
824
716
  }
825
717
  else
826
718
  {
@@ -844,7 +736,7 @@ IceInternal::ThreadPool::run(const EventHandlerThreadPtr& thread)
844
736
  _handlers.clear();
845
737
  _selector.startSelect();
846
738
  select = true;
847
- thread->setState(ThreadStateIdle);
739
+ thread->setState(ICE_ENUM(ThreadState, ThreadStateIdle));
848
740
  }
849
741
  }
850
742
  else if(_sizeMax > 1)
@@ -868,11 +760,11 @@ IceInternal::ThreadPool::run(const EventHandlerThreadPtr& thread)
868
760
  try
869
761
  {
870
762
  current._ioCompleted = false;
871
- #ifdef ICE_OS_WINRT
872
- current._handler = _selector.getNextHandler(current.operation, _threadIdleTime);
763
+ #ifdef ICE_OS_UWP
764
+ current._handler = ICE_GET_SHARED_FROM_THIS(_selector.getNextHandler(current.operation, _threadIdleTime));
873
765
  #else
874
- current._handler = _selector.getNextHandler(current.operation, current._count, current._error,
875
- _threadIdleTime);
766
+ current._handler = ICE_GET_SHARED_FROM_THIS(_selector.getNextHandler(current.operation, current._count, current._error,
767
+ _threadIdleTime));
876
768
  #endif
877
769
  }
878
770
  catch(const SelectorTimeoutException&)
@@ -887,7 +779,7 @@ IceInternal::ThreadPool::run(const EventHandlerThreadPtr& thread)
887
779
  }
888
780
  else if(_inUse < static_cast<int>(_threads.size() - 1)) // If not the last idle thread, we can exit.
889
781
  {
890
- #ifndef ICE_OS_WINRT
782
+ #ifndef ICE_OS_UWP
891
783
  BOOL hasIO = false;
892
784
  GetThreadIOPendingFlag(GetCurrentThread(), &hasIO);
893
785
  if(hasIO)
@@ -918,11 +810,12 @@ IceInternal::ThreadPool::run(const EventHandlerThreadPtr& thread)
918
810
 
919
811
  try
920
812
  {
921
- #ifdef ICE_OS_WINRT
922
- current._handler = _selector.getNextHandler(current.operation, _serverIdleTime);
813
+ #ifdef ICE_OS_UWP
814
+ current._handler = ICE_GET_SHARED_FROM_THIS(_selector.getNextHandler(current.operation, _serverIdleTime));
923
815
  #else
924
- current._handler = _selector.getNextHandler(current.operation, current._count, current._error,
925
- _serverIdleTime);
816
+
817
+ current._handler = ICE_GET_SHARED_FROM_THIS(_selector.getNextHandler(current.operation, current._count,
818
+ current._error, _serverIdleTime));
926
819
  #endif
927
820
  }
928
821
  catch(const SelectorTimeoutException&)
@@ -938,7 +831,7 @@ IceInternal::ThreadPool::run(const EventHandlerThreadPtr& thread)
938
831
 
939
832
  {
940
833
  IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
941
- thread->setState(ThreadStateInUseForIO);
834
+ thread->setState(ICE_ENUM(ThreadState, ThreadStateInUseForIO));
942
835
  }
943
836
 
944
837
  try
@@ -955,7 +848,7 @@ IceInternal::ThreadPool::run(const EventHandlerThreadPtr& thread)
955
848
  Error out(_instance->initializationData().logger);
956
849
  out << "exception in `" << _prefix << "':\n" << ex << "\nevent handler: " << current._handler->toString();
957
850
  }
958
- #ifdef ICE_OS_WINRT
851
+ #ifdef ICE_OS_UWP
959
852
  catch(Platform::Exception^ ex)
960
853
  {
961
854
  //
@@ -964,7 +857,7 @@ IceInternal::ThreadPool::run(const EventHandlerThreadPtr& thread)
964
857
  //
965
858
  Error out(_instance->initializationData().logger);
966
859
  out << "exception in `" << _prefix << "':\n"
967
- << IceUtil::wstringToString(ex->Message->Data(), _instance->getStringConverter())
860
+ << wstringToString(ex->Message->Data(), _instance->getStringConverter())
968
861
  << "\nevent handler: " << current._handler->toString();
969
862
  }
970
863
  #endif
@@ -981,7 +874,7 @@ IceInternal::ThreadPool::run(const EventHandlerThreadPtr& thread)
981
874
  assert(_inUse > 0);
982
875
  --_inUse;
983
876
  }
984
- thread->setState(ThreadStateIdle);
877
+ thread->setState(ICE_ENUM(ThreadState, ThreadStateIdle));
985
878
  }
986
879
  }
987
880
  #endif
@@ -994,12 +887,12 @@ IceInternal::ThreadPool::ioCompleted(ThreadPoolCurrent& current)
994
887
 
995
888
  current._ioCompleted = true; // Set the IO completed flag to specifiy that ioCompleted() has been called.
996
889
 
997
- current._thread->setState(ThreadStateInUseForUser);
890
+ current._thread->setState(ICE_ENUM(ThreadState, ThreadStateInUseForUser));
998
891
 
999
892
  if(_sizeMax > 1)
1000
893
  {
1001
894
 
1002
- #if !defined(ICE_USE_IOCP) && !defined(ICE_OS_WINRT)
895
+ #if !defined(ICE_USE_IOCP) && !defined(ICE_OS_UWP)
1003
896
  --_inUseIO;
1004
897
 
1005
898
  if(!_destroyed)
@@ -1007,19 +900,6 @@ IceInternal::ThreadPool::ioCompleted(ThreadPoolCurrent& current)
1007
900
  if(_serialize && current._handler.get() != _workQueue.get())
1008
901
  {
1009
902
  _selector.disable(current._handler.get(), current.operation);
1010
-
1011
- // Make sure the handler isn't in the set of pending handlers (this can
1012
- // for example occur if the handler is has more data and its added by
1013
- // ThreadPool::update while we were processing IO).
1014
- _pendingHandlers.erase(current._handler.get());
1015
- }
1016
- else if(current._handler->_hasMoreData && current._handler->_registered & SocketOperationRead)
1017
- {
1018
- if(_pendingHandlers.empty())
1019
- {
1020
- _workQueue->queue(interruptWorkItem); // Interrupt select()
1021
- }
1022
- _pendingHandlers.insert(current._handler.get());
1023
903
  }
1024
904
  }
1025
905
 
@@ -1082,7 +962,7 @@ IceInternal::ThreadPool::ioCompleted(ThreadPoolCurrent& current)
1082
962
  return _serialize && current._handler.get() != _workQueue.get();
1083
963
  }
1084
964
 
1085
- #if defined(ICE_USE_IOCP) || defined(ICE_OS_WINRT)
965
+ #if defined(ICE_USE_IOCP) || defined(ICE_OS_UWP)
1086
966
  bool
1087
967
  IceInternal::ThreadPool::startMessage(ThreadPoolCurrent& current)
1088
968
  {
@@ -1090,11 +970,11 @@ IceInternal::ThreadPool::startMessage(ThreadPoolCurrent& current)
1090
970
 
1091
971
  if(current._handler->_started & current.operation)
1092
972
  {
1093
- assert(!(current._handler->_ready & current.operation));
1094
- current._handler->_ready = static_cast<SocketOperation>(current._handler->_ready | current.operation);
973
+ assert(!(current._handler->_completed & current.operation));
974
+ current._handler->_completed = static_cast<SocketOperation>(current._handler->_completed | current.operation);
1095
975
  current._handler->_started = static_cast<SocketOperation>(current._handler->_started & ~current.operation);
1096
976
 
1097
- #ifndef ICE_OS_WINRT
977
+ #ifndef ICE_OS_UWP
1098
978
  AsyncInfo* info = current._handler->getNativeInfo()->getAsyncInfo(current.operation);
1099
979
  info->count = current._count;
1100
980
  info->error = current._error;
@@ -1105,20 +985,26 @@ IceInternal::ThreadPool::startMessage(ThreadPoolCurrent& current)
1105
985
  current._handler->_pending = static_cast<SocketOperation>(current._handler->_pending & ~current.operation);
1106
986
  if(!(current._handler->_pending & SocketOperationWaitForClose) && current._handler->_finish)
1107
987
  {
988
+ Lock sync(*this);
1108
989
  _workQueue->queue(new FinishedWorkItem(current._handler, false));
1109
990
  _selector.finish(current._handler.get());
1110
991
  }
1111
992
  return false;
1112
993
  }
1113
994
  }
1114
- else if(!(current._handler->_ready & current.operation) && (current._handler->_registered & current.operation))
995
+ else if(!(current._handler->_completed & current.operation) && (current._handler->_registered & current.operation))
1115
996
  {
1116
997
  assert(!(current._handler->_started & current.operation));
1117
- if(!current._handler->startAsync(current.operation))
998
+ if(current._handler->_ready & current.operation)
999
+ {
1000
+ return true;
1001
+ }
1002
+ else if(!current._handler->startAsync(current.operation))
1118
1003
  {
1119
1004
  current._handler->_pending = static_cast<SocketOperation>(current._handler->_pending & ~current.operation);
1120
1005
  if(!(current._handler->_pending & SocketOperationWaitForClose) && current._handler->_finish)
1121
1006
  {
1007
+ Lock sync(*this);
1122
1008
  _workQueue->queue(new FinishedWorkItem(current._handler, false));
1123
1009
  _selector.finish(current._handler.get());
1124
1010
  }
@@ -1133,8 +1019,8 @@ IceInternal::ThreadPool::startMessage(ThreadPoolCurrent& current)
1133
1019
 
1134
1020
  if(current._handler->_registered & current.operation)
1135
1021
  {
1136
- assert(current._handler->_ready & current.operation);
1137
- current._handler->_ready = static_cast<SocketOperation>(current._handler->_ready & ~current.operation);
1022
+ assert(current._handler->_completed & current.operation);
1023
+ current._handler->_completed = static_cast<SocketOperation>(current._handler->_completed & ~current.operation);
1138
1024
  return true;
1139
1025
  }
1140
1026
  else
@@ -1142,6 +1028,7 @@ IceInternal::ThreadPool::startMessage(ThreadPoolCurrent& current)
1142
1028
  current._handler->_pending = static_cast<SocketOperation>(current._handler->_pending & ~current.operation);
1143
1029
  if(!(current._handler->_pending & SocketOperationWaitForClose) && current._handler->_finish)
1144
1030
  {
1031
+ Lock sync(*this);
1145
1032
  _workQueue->queue(new FinishedWorkItem(current._handler, false));
1146
1033
  _selector.finish(current._handler.get());
1147
1034
  }
@@ -1152,10 +1039,14 @@ IceInternal::ThreadPool::startMessage(ThreadPoolCurrent& current)
1152
1039
  void
1153
1040
  IceInternal::ThreadPool::finishMessage(ThreadPoolCurrent& current)
1154
1041
  {
1155
- if(current._handler->_registered & current.operation)
1042
+ if(current._handler->_registered & current.operation && !current._handler->_finish)
1156
1043
  {
1157
- assert(!(current._handler->_ready & current.operation));
1158
- if(!current._handler->startAsync(current.operation))
1044
+ assert(!(current._handler->_completed & current.operation));
1045
+ if(current._handler->_ready & current.operation)
1046
+ {
1047
+ _selector.completed(current._handler.get(), current.operation);
1048
+ }
1049
+ else if(!current._handler->startAsync(current.operation))
1159
1050
  {
1160
1051
  current._handler->_pending = static_cast<SocketOperation>(current._handler->_pending & ~current.operation);
1161
1052
  }
@@ -1173,6 +1064,7 @@ IceInternal::ThreadPool::finishMessage(ThreadPoolCurrent& current)
1173
1064
  if(!(current._handler->_pending & SocketOperationWaitForClose) && current._handler->_finish)
1174
1065
  {
1175
1066
  // There are no more pending async operations, it's time to call finish.
1067
+ Lock sync(*this);
1176
1068
  _workQueue->queue(new FinishedWorkItem(current._handler, false));
1177
1069
  _selector.finish(current._handler.get());
1178
1070
  }
@@ -1195,7 +1087,7 @@ IceInternal::ThreadPool::followerWait(ThreadPoolCurrent& current)
1195
1087
  {
1196
1088
  assert(!current._leader);
1197
1089
 
1198
- current._thread->setState(ThreadStateIdle);
1090
+ current._thread->setState(ICE_ENUM(ThreadState, ThreadStateIdle));
1199
1091
 
1200
1092
  //
1201
1093
  // It's important to clear the handler before waiting to make sure that
@@ -1252,7 +1144,7 @@ IceInternal::ThreadPool::nextThreadId()
1252
1144
  IceInternal::ThreadPool::EventHandlerThread::EventHandlerThread(const ThreadPoolPtr& pool, const string& name) :
1253
1145
  IceUtil::Thread(name),
1254
1146
  _pool(pool),
1255
- _state(Ice::Instrumentation::ThreadStateIdle)
1147
+ _state(ICE_ENUM(ThreadState, ThreadStateIdle))
1256
1148
  {
1257
1149
  updateObserver();
1258
1150
  }
@@ -1285,11 +1177,19 @@ IceInternal::ThreadPool::EventHandlerThread::setState(Ice::Instrumentation::Thre
1285
1177
  void
1286
1178
  IceInternal::ThreadPool::EventHandlerThread::run()
1287
1179
  {
1180
+ #ifdef ICE_CPP11_MAPPING
1181
+ if(_pool->_instance->initializationData().threadStart)
1182
+ #else
1288
1183
  if(_pool->_instance->initializationData().threadHook)
1184
+ #endif
1289
1185
  {
1290
1186
  try
1291
1187
  {
1188
+ #ifdef ICE_CPP11_MAPPING
1189
+ _pool->_instance->initializationData().threadStart();
1190
+ #else
1292
1191
  _pool->_instance->initializationData().threadHook->start();
1192
+ #endif
1293
1193
  }
1294
1194
  catch(const exception& ex)
1295
1195
  {
@@ -1320,11 +1220,19 @@ IceInternal::ThreadPool::EventHandlerThread::run()
1320
1220
 
1321
1221
  _observer.detach();
1322
1222
 
1223
+ #ifdef ICE_CPP11_MAPPING
1224
+ if(_pool->_instance->initializationData().threadStop)
1225
+ #else
1323
1226
  if(_pool->_instance->initializationData().threadHook)
1227
+ #endif
1324
1228
  {
1325
1229
  try
1326
1230
  {
1231
+ #ifdef ICE_CPP11_MAPPING
1232
+ _pool->_instance->initializationData().threadStop();
1233
+ #else
1327
1234
  _pool->_instance->initializationData().threadHook->stop();
1235
+ #endif
1328
1236
  }
1329
1237
  catch(const exception& ex)
1330
1238
  {
@@ -1349,7 +1257,7 @@ ThreadPoolCurrent::ThreadPoolCurrent(const InstancePtr& instance,
1349
1257
  _threadPool(threadPool.get()),
1350
1258
  _thread(thread),
1351
1259
  _ioCompleted(false)
1352
- #if !defined(ICE_USE_IOCP) && !defined(ICE_OS_WINRT)
1260
+ #if !defined(ICE_USE_IOCP) && !defined(ICE_OS_UWP)
1353
1261
  , _leader(false)
1354
1262
  #endif
1355
1263
  {