diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Ice/CommunicatorI.cpp | 19 | ||||
-rw-r--r-- | cpp/src/Ice/CommunicatorI.h | 5 | ||||
-rw-r--r-- | cpp/src/Ice/ObjectAdapterI.cpp | 8 | ||||
-rw-r--r-- | cpp/src/Ice/ObjectAdapterI.h | 4 | ||||
-rw-r--r-- | cpp/src/Ice/ThreadPool.cpp | 24 | ||||
-rw-r--r-- | cpp/src/Ice/ThreadPool.h | 12 | ||||
-rw-r--r-- | cpp/src/slice2cpp/Gen.cpp | 7 |
7 files changed, 77 insertions, 2 deletions
diff --git a/cpp/src/Ice/CommunicatorI.cpp b/cpp/src/Ice/CommunicatorI.cpp index 36198c82d75..4355ad80977 100644 --- a/cpp/src/Ice/CommunicatorI.cpp +++ b/cpp/src/Ice/CommunicatorI.cpp @@ -18,6 +18,9 @@ #include <IceUtil/Mutex.h> #include <IceUtil/MutexPtrLock.h> #include <Ice/UUID.h> +#ifdef ICE_SWIFT +#include <Ice/ThreadPool.h> +#endif using namespace std; using namespace Ice; @@ -378,6 +381,22 @@ Ice::CommunicatorI::getValueFactoryManager() const ICE_NOEXCEPT return _instance->initializationData().valueFactoryManager; } +#ifdef ICE_SWIFT + +dispatch_queue_t +Ice::CommunicatorI::getClientDispatchQueue() const ICE_NOEXCEPT +{ + return _instance->clientThreadPool()->getDispatchQueue(); +} + +dispatch_queue_t +Ice::CommunicatorI::getServerDispatchQueue() const ICE_NOEXCEPT +{ + return _instance->serverThreadPool()->getDispatchQueue(); +} + +#endif + namespace { diff --git a/cpp/src/Ice/CommunicatorI.h b/cpp/src/Ice/CommunicatorI.h index f28b49a2299..ae0f4e817c8 100644 --- a/cpp/src/Ice/CommunicatorI.h +++ b/cpp/src/Ice/CommunicatorI.h @@ -97,6 +97,11 @@ public: virtual ValueFactoryManagerPtr getValueFactoryManager() const ICE_NOEXCEPT; +#ifdef ICE_SWIFT + virtual dispatch_queue_t getClientDispatchQueue() const ICE_NOEXCEPT; + virtual dispatch_queue_t getServerDispatchQueue() const ICE_NOEXCEPT; +#endif + #ifdef ICE_CPP11_MAPPING virtual ::std::function<void()> flushBatchRequestsAsync(CompressBatch, diff --git a/cpp/src/Ice/ObjectAdapterI.cpp b/cpp/src/Ice/ObjectAdapterI.cpp index 937c74e54cc..102636af70d 100644 --- a/cpp/src/Ice/ObjectAdapterI.cpp +++ b/cpp/src/Ice/ObjectAdapterI.cpp @@ -735,6 +735,14 @@ Ice::ObjectAdapterI::setPublishedEndpoints(const EndpointSeq& newEndpoints) } } +#ifdef ICE_SWIFT +dispatch_queue_t +Ice::ObjectAdapterI::getDispatchQueue() const ICE_NOEXCEPT +{ + return getThreadPool()->getDispatchQueue(); +} +#endif + bool Ice::ObjectAdapterI::isLocal(const ObjectPrxPtr& proxy) const { diff --git a/cpp/src/Ice/ObjectAdapterI.h b/cpp/src/Ice/ObjectAdapterI.h index 9c024a90b64..00496d9133d 100644 --- a/cpp/src/Ice/ObjectAdapterI.h +++ b/cpp/src/Ice/ObjectAdapterI.h @@ -85,6 +85,10 @@ public: virtual EndpointSeq getPublishedEndpoints() const ICE_NOEXCEPT; virtual void setPublishedEndpoints(const EndpointSeq&); +#ifdef ICE_SWIFT + virtual dispatch_queue_t getDispatchQueue() const ICE_NOEXCEPT; +#endif + bool isLocal(const ObjectPrxPtr&) const; void flushAsyncBatchRequests(const IceInternal::CommunicatorFlushBatchAsyncPtr&, CompressBatch); diff --git a/cpp/src/Ice/ThreadPool.cpp b/cpp/src/Ice/ThreadPool.cpp index b836137170a..2994f292d86 100644 --- a/cpp/src/Ice/ThreadPool.cpp +++ b/cpp/src/Ice/ThreadPool.cpp @@ -245,7 +245,11 @@ IceInternal::ThreadPoolWorkQueue::getNativeInfo() IceInternal::ThreadPool::ThreadPool(const InstancePtr& instance, const string& prefix, int timeout) : _instance(instance), +#ifdef ICE_SWIFT + _dispatchQueue(dispatch_queue_create(prefix.c_str(), DISPATCH_QUEUE_CONCURRENT)), +#else _dispatcher(_instance->initializationData().dispatcher), +#endif _destroyed(false), _prefix(prefix), _selector(instance), @@ -417,6 +421,9 @@ IceInternal::ThreadPool::ThreadPool(const InstancePtr& instance, const string& p IceInternal::ThreadPool::~ThreadPool() { assert(_destroyed); +#ifdef ICE_SWIFT + dispatch_release(_dispatchQueue); +#endif } void @@ -531,6 +538,12 @@ IceInternal::ThreadPool::ready(const EventHandlerPtr& handler, SocketOperation o void IceInternal::ThreadPool::dispatchFromThisThread(const DispatchWorkItemPtr& workItem) { +#ifdef ICE_SWIFT + dispatch_sync(_dispatchQueue, ^ + { + workItem->run(); + }); +#else if(_dispatcher) { try @@ -566,6 +579,7 @@ IceInternal::ThreadPool::dispatchFromThisThread(const DispatchWorkItemPtr& workI { workItem->run(); } +#endif } void @@ -603,6 +617,16 @@ IceInternal::ThreadPool::prefix() const return _prefix; } +#ifdef ICE_SWIFT + +dispatch_queue_t +IceInternal::ThreadPool::getDispatchQueue() const +{ + return _dispatchQueue; +} + +#endif + void IceInternal::ThreadPool::run(const EventHandlerThreadPtr& thread) { diff --git a/cpp/src/Ice/ThreadPool.h b/cpp/src/Ice/ThreadPool.h index f9641296a14..daff7373f1a 100644 --- a/cpp/src/Ice/ThreadPool.h +++ b/cpp/src/Ice/ThreadPool.h @@ -110,6 +110,10 @@ public: std::string prefix() const; +#ifdef ICE_SWIFT + dispatch_queue_t getDispatchQueue() const; +#endif + private: void run(const EventHandlerThreadPtr&); @@ -127,10 +131,14 @@ private: std::string nextThreadId(); const InstancePtr _instance; -#ifdef ICE_CPP11_MAPPING +#ifdef ICE_SWIFT + const dispatch_queue_t _dispatchQueue; +#else // Ice for Swift does not support a dispatcher +# ifdef ICE_CPP11_MAPPING std::function<void(std::function<void()>, const std::shared_ptr<Ice::Connection>&)> _dispatcher; -#else +# else const Ice::DispatcherPtr _dispatcher; +# endif #endif ThreadPoolWorkQueuePtr _workQueue; bool _destroyed; diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp index 6315c900650..afb8f2976c7 100644 --- a/cpp/src/slice2cpp/Gen.cpp +++ b/cpp/src/slice2cpp/Gen.cpp @@ -5686,6 +5686,13 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin } } + if(BuiltinPtr::dynamicCast(cont) && + BuiltinPtr::dynamicCast(cont)->kind() == Builtin::KindLocalObject && + ss.find("type:") == 0) + { + continue; + } + dc->warning(InvalidMetaData, file, line, "ignoring invalid metadata `" + s + "'"); newMetaData.remove(s); continue; |