zeroc-ice 3.6.5 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
  {