void initializeTransportFactories() { #ifdef RCF_USE_IPV6 const bool compileTimeIpv6 = true; ExceptionPtr ePtr; IpAddress("::1").resolve(ePtr); const bool runTimeIpv6 = (ePtr.get() == NULL); #else const bool compileTimeIpv6 = false; const bool runTimeIpv6 = false; #endif #if defined(BOOST_WINDOWS) getTransportFactories().push_back( TransportFactoryPtr( new Win32NamedPipeTransportFactory())); #endif getTransportFactories().push_back( TransportFactoryPtr( new TcpAsioTransportFactory(IpAddress::V4))); getIpTransportFactories().push_back( TransportFactoryPtr( new TcpAsioTransportFactory(IpAddress::V4))); if (compileTimeIpv6 && runTimeIpv6) { getTransportFactories().push_back( TransportFactoryPtr( new TcpAsioTransportFactory(IpAddress::V6))); getIpTransportFactories().push_back( TransportFactoryPtr( new TcpAsioTransportFactory(IpAddress::V6))); } #ifdef RCF_HAS_LOCAL_SOCKETS getTransportFactories().push_back( TransportFactoryPtr( new UnixLocalTransportFactory())); #endif #ifndef RCF_TEST_NO_UDP getTransportFactories().push_back( TransportFactoryPtr( new UdpTransportFactory(IpAddress::V4))); getIpTransportFactories().push_back( TransportFactoryPtr( new UdpTransportFactory(IpAddress::V4))); if (compileTimeIpv6 && runTimeIpv6) { getTransportFactories().push_back( TransportFactoryPtr( new UdpTransportFactory(IpAddress::V6))); getIpTransportFactories().push_back( TransportFactoryPtr( new UdpTransportFactory(IpAddress::V6))); } #endif }
void Exceptions::load(ProgressIndicator* progressIndicator) { DatabasePtr db = getDatabase(); MetadataLoader* loader = db->getMetadataLoader(); MetadataLoaderTransaction tr(loader); wxMBConv* converter = db->getCharsetConverter(); IBPP::Statement& st1 = loader->getStatement( Exception::getLoadStatement(true)); CollectionType exceptions; st1->Execute(); checkProgressIndicatorCanceled(progressIndicator); while (st1->Fetch()) { if (!st1->IsNull(1)) { std::string s; st1->Get(1, s); wxString name(std2wxIdentifier(s, converter)); ExceptionPtr exception = findByName(name); if (!exception) { exception.reset(new Exception(db, name)); initializeLockCount(exception, getLockCount()); } exceptions.push_back(exception); exception->loadProperties(st1, converter); } checkProgressIndicatorCanceled(progressIndicator); } setItems(exceptions); }
void SubscriptionService::createSubscriptionImplEnd( ExceptionPtr ePtr, ClientStubPtr clientStubPtr, boost::int32_t ret, const std::string & publisherName, RcfClientPtr rcfClientPtr, OnSubscriptionDisconnect onDisconnect, OnAsyncSubscribeCompleted onCompletion, boost::uint32_t incomingPingIntervalMs, bool pingsEnabled) { SubscriptionPtr subscriptionPtr; if (!ePtr && ret != RcfError_Ok) { ePtr.reset( new Exception( Error(ret) ) ); } if (!ePtr) { subscriptionPtr = onRequestSubscriptionCompleted( ret, publisherName, *clientStubPtr, rcfClientPtr, onDisconnect, incomingPingIntervalMs, pingsEnabled); } onCompletion(subscriptionPtr, ePtr); }
bool Slice::ChecksumVisitor::visitExceptionStart(const ExceptionPtr& p) { if (p->isLocal()) { return false; } ExceptionPtr base = p->base(); ostringstream ostr; ostr << "exception " << p->name(); if (base) { ostr << " extends " << base->scoped(); } ostr << endl; DataMemberList members = p->dataMembers(); for (DataMemberList::iterator q = members.begin(); q != members.end(); ++q) { ostr << typeToString((*q)->type()) << ' ' << (*q)->name() << endl; } updateMap(p->scoped(), ostr.str()); return false; }
void CodeVisitor::collectExceptionMembers(const ExceptionPtr& p, MemberInfoList& allMembers, bool inherited) { ExceptionPtr base = p->base(); if(base) { collectExceptionMembers(base, allMembers, true); } DataMemberList members = p->dataMembers(); for(DataMemberList::iterator q = members.begin(); q != members.end(); ++q) { MemberInfo m; m.fixedName = fixIdent((*q)->name()); m.inherited = inherited; m.dataMember = *q; allMembers.push_back(m); } }
void Group::spawnThreadRealMain(const SpawnerPtr &spawner, const Options &options, unsigned int restartsInitiated) { TRACE_POINT(); this_thread::disable_interruption di; this_thread::disable_syscall_interruption dsi; PoolPtr pool = getPool(); Pool::DebugSupportPtr debug = pool->debugSupport; bool done = false; while (!done) { bool shouldFail = false; if (debug != NULL && debug->spawning) { UPDATE_TRACE_POINT(); this_thread::restore_interruption ri(di); this_thread::restore_syscall_interruption rsi(dsi); this_thread::interruption_point(); string iteration; { LockGuard g(debug->syncher); debug->spawnLoopIteration++; iteration = toString(debug->spawnLoopIteration); } P_DEBUG("Begin spawn loop iteration " << iteration); debug->debugger->send("Begin spawn loop iteration " + iteration); vector<string> cases; cases.push_back("Proceed with spawn loop iteration " + iteration); cases.push_back("Fail spawn loop iteration " + iteration); MessagePtr message = debug->messages->recvAny(cases); shouldFail = message->name == "Fail spawn loop iteration " + iteration; } ProcessPtr process; ExceptionPtr exception; try { UPDATE_TRACE_POINT(); this_thread::restore_interruption ri(di); this_thread::restore_syscall_interruption rsi(dsi); if (shouldFail) { throw SpawnException("Simulated failure"); } else { process = spawner->spawn(options); process->setGroup(shared_from_this()); } } catch (const thread_interrupted &) { break; } catch (const tracable_exception &e) { exception = copyException(e); // Let other (unexpected) exceptions crash the program so // gdb can generate a backtrace. } UPDATE_TRACE_POINT(); ScopeGuard guard(boost::bind(Process::forceTriggerShutdownAndCleanup, process)); boost::unique_lock<boost::mutex> lock(pool->syncher); if (!isAlive()) { if (process != NULL) { P_DEBUG("Group is being shut down so dropping process " << process->inspect() << " which we just spawned and exiting spawn loop"); } else { P_DEBUG("The group is being shut down. A process failed " "to be spawned anyway, so ignoring this error and exiting " "spawn loop"); } // We stop immediately because any previously assumed invariants // may have been violated. break; } else if (restartsInitiated != this->restartsInitiated) { if (process != NULL) { P_DEBUG("A restart was issued for the group, so dropping process " << process->inspect() << " which we just spawned and exiting spawn loop"); } else { P_DEBUG("A restart was issued for the group. A process failed " "to be spawned anyway, so ignoring this error and exiting " "spawn loop"); } // We stop immediately because any previously assumed invariants // may have been violated. break; } verifyInvariants(); assert(m_spawning); assert(processesBeingSpawned > 0); processesBeingSpawned--; assert(processesBeingSpawned == 0); UPDATE_TRACE_POINT(); vector<Callback> actions; if (process != NULL) { AttachResult result = attach(process, actions); if (result == AR_OK) { guard.clear(); if (getWaitlist.empty()) { pool->assignSessionsToGetWaiters(actions); } else { assignSessionsToGetWaiters(actions); } P_DEBUG("New process count = " << enabledCount << ", remaining get waiters = " << getWaitlist.size()); } else { done = true; P_DEBUG("Unable to attach spawned process " << process->inspect()); if (result == AR_ANOTHER_GROUP_IS_WAITING_FOR_CAPACITY) { pool->possiblySpawnMoreProcessesForExistingGroups(); } } } else { // TODO: sure this is the best thing? if there are // processes currently alive we should just use them. P_ERROR("Could not spawn process for group " << name << ": " << exception->what() << "\n" << exception->backtrace()); if (enabledCount == 0) { enableAllDisablingProcesses(actions); } Pool::assignExceptionToGetWaiters(getWaitlist, exception, actions); pool->assignSessionsToGetWaiters(actions); done = true; } done = done || (processLowerLimitsSatisfied() && getWaitlist.empty()) || processUpperLimitsReached() || pool->atFullCapacity(false); m_spawning = !done; if (done) { P_DEBUG("Spawn loop done"); } else { processesBeingSpawned++; P_DEBUG("Continue spawning"); } UPDATE_TRACE_POINT(); pool->fullVerifyInvariants(); lock.unlock(); UPDATE_TRACE_POINT(); runAllActions(actions); UPDATE_TRACE_POINT(); } if (debug != NULL && debug->spawning) { debug->debugger->send("Spawn loop done"); } }
bool CodeVisitor::visitExceptionStart(const ExceptionPtr& p) { string scoped = p->scoped(); string name = getName(p); string type = getTypeVar(p); string abs = getAbsolute(p, _ns); startNamespace(p); _out << sp << nl << "if(!class_exists('" << escapeName(abs) << "'))"; _out << sb; _out << nl << "class " << name << " extends "; ExceptionPtr base = p->base(); string baseName; if(base) { baseName = getAbsolute(base, _ns); _out << baseName; } else if(p->isLocal()) { _out << scopedToName("::Ice::LocalException", _ns); } else { _out << scopedToName("::Ice::UserException", _ns); } _out << sb; DataMemberList members = p->dataMembers(); DataMemberList::iterator dmli; // // __construct // _out << nl << "public function __construct("; MemberInfoList allMembers; collectExceptionMembers(p, allMembers, false); writeConstructorParams(allMembers); _out << ")"; _out << sb; if(base) { _out << nl << "parent::__construct("; int count = 0; for(MemberInfoList::iterator q = allMembers.begin(); q != allMembers.end(); ++q) { if(q->inherited) { if(count) { _out << ", "; } _out << '$' << q->fixedName; ++count; } } _out << ");"; } for(MemberInfoList::iterator q = allMembers.begin(); q != allMembers.end(); ++q) { if(!q->inherited) { writeAssign(*q); } } _out << eb; // // ice_name // _out << sp << nl << "public function ice_name()"; _out << sb; _out << nl << "return '" << scoped.substr(2) << "';"; _out << eb; // // __toString // _out << sp << nl << "public function __toString()"; _out << sb; _out << nl << "global " << type << ';'; _out << nl << "return IcePHP_stringifyException($this, " << type << ");"; _out << eb; if(!members.empty()) { _out << sp; for(dmli = members.begin(); dmli != members.end(); ++dmli) { _out << nl << "public $" << fixIdent((*dmli)->name()) << ";"; } } _out << eb; // // Emit the type information. // _out << sp << nl << type << " = IcePHP_defineException('" << scoped << "', '" << escapeName(abs) << "', "; if(!base) { _out << "null"; } else { _out << getTypeVar(base); } _out << ", "; // // Data members are represented as an array: // // ('MemberName', MemberType) // // where MemberType is either a primitive type constant (T_INT, etc.) or the id of a constructed type. // if(!members.empty()) { _out << "array("; for(dmli = members.begin(); dmli != members.end(); ++dmli) { if(dmli != members.begin()) { _out << ',' << nl; } _out.inc(); _out << nl << "array('" << fixIdent((*dmli)->name()) << "', "; writeType((*dmli)->type()); _out << ')'; _out.dec(); } _out << ')'; } else { _out << "null"; } _out << ");"; _out << eb; endNamespace(); return false; }
bool Slice::Ruby::CodeVisitor::visitExceptionStart(const ExceptionPtr& p) { string scoped = p->scoped(); string name = fixIdent(p->name(), IdentToUpper); _out << sp << nl << "if not defined?(" << getAbsolute(p, IdentToUpper) << ')'; _out.inc(); _out << nl << "class " << name << " < "; ExceptionPtr base = p->base(); string baseName; if(base) { baseName = getAbsolute(base, IdentToUpper); _out << baseName; } else if(p->isLocal()) { _out << "Ice::LocalException"; } else { _out << "Ice::UserException"; } _out.inc(); DataMemberList members = p->dataMembers(); DataMemberList::iterator dmli; // // initialize // _out << nl << "def initialize"; MemberInfoList allMembers; collectExceptionMembers(p, allMembers, false); bool inheritsMembers = false; if(!allMembers.empty()) { _out << '('; writeConstructorParams(allMembers); _out << ')'; for(MemberInfoList::iterator q = allMembers.begin(); q != allMembers.end(); ++q) { if(q->inherited) { inheritsMembers = true; } } } _out.inc(); if(!allMembers.empty()) { if(inheritsMembers) { _out << nl << "super" << spar; for(MemberInfoList::iterator q = allMembers.begin(); q != allMembers.end(); ++q) { if(q->inherited) { _out << q->lowerName; } } _out << epar; } for(MemberInfoList::iterator q = allMembers.begin(); q != allMembers.end(); ++q) { if(!q->inherited) { _out << nl << '@' << q->fixedName << " = " << q->lowerName; } } } _out.dec(); _out << nl << "end"; // // to_s // _out << sp << nl << "def to_s"; _out.inc(); _out << nl << "'" << scoped.substr(2) << "'"; _out.dec(); _out << nl << "end"; // // read/write accessors for data members. // if(!members.empty()) { _out << sp << nl << "attr_accessor "; for(dmli = members.begin(); dmli != members.end(); ++dmli) { if(dmli != members.begin()) { _out << ", "; } _out << ':' << fixIdent((*dmli)->name(), IdentNormal); } } _out.dec(); _out << nl << "end"; // End of class. // // Emit the type information. // _out << sp << nl << "T_" << name << " = ::Ice::__defineException('" << scoped << "', " << name << ", "; if(!base) { _out << "nil"; } else { _out << getAbsolute(base, IdentToUpper, "T_"); } _out << ", ["; if(members.size() > 1) { _out.inc(); _out << nl; } // // Data members are represented as an array: // // ['MemberName', MemberType] // // where MemberType is either a primitive type constant (T_INT, etc.) or the id of a constructed type. // for(dmli = members.begin(); dmli != members.end(); ++dmli) { if(dmli != members.begin()) { _out << ',' << nl; } _out << "[\"" << fixIdent((*dmli)->name(), IdentNormal) << "\", "; writeType((*dmli)->type()); _out << ']'; } if(members.size() > 1) { _out.dec(); _out << nl; } _out << "])"; _out << nl << name << "::ICE_TYPE = T_" << name; _out.dec(); _out << nl << "end"; // if not defined?() return false; }
void initializeTransportFactories() { #if RCF_FEATURE_IPV6==1 const bool compileTimeIpv6 = true; ExceptionPtr ePtr; IpAddress("::1").resolve(ePtr); const bool runTimeIpv6 = (ePtr.get() == NULL); #else const bool compileTimeIpv6 = false; const bool runTimeIpv6 = false; #endif #if RCF_FEATURE_NAMEDPIPE==1 getTransportFactories().push_back( TransportFactoryPtr( new Win32NamedPipeTransportFactory())); #endif #if RCF_FEATURE_TCP==1 getTransportFactories().push_back( TransportFactoryPtr( new TcpAsioTransportFactory(IpAddress::V4))); getIpTransportFactories().push_back( TransportFactoryPtr( new TcpAsioTransportFactory(IpAddress::V4))); if (compileTimeIpv6 && runTimeIpv6) { getTransportFactories().push_back( TransportFactoryPtr( new TcpAsioTransportFactory(IpAddress::V6))); getIpTransportFactories().push_back( TransportFactoryPtr( new TcpAsioTransportFactory(IpAddress::V6))); } #endif #if RCF_FEATURE_LOCALSOCKET==1 getTransportFactories().push_back( TransportFactoryPtr( new UnixLocalTransportFactory())); #endif #if RCF_FEATURE_UDP==1 getTransportFactories().push_back( TransportFactoryPtr( new UdpTransportFactory(IpAddress::V4))); getIpTransportFactories().push_back( TransportFactoryPtr( new UdpTransportFactory(IpAddress::V4))); if (compileTimeIpv6 && runTimeIpv6) { getTransportFactories().push_back( TransportFactoryPtr( new UdpTransportFactory(IpAddress::V6))); getIpTransportFactories().push_back( TransportFactoryPtr( new UdpTransportFactory(IpAddress::V6))); } #endif }