delete func;
}
-template<class T> T broadcastAccFunction(const pipefunc_t& func, bool skipSelf)
+template<class T> void *voider(const boost::function<T*()>& func)
+{
+ return func();
+}
+
+template<class T> T broadcastAccFunction(const boost::function<T*()>& func, bool skipSelf)
{
unsigned int n = 0;
T ret=T();
continue;
}
- pipefunc_t *funcptr = new pipefunc_t(func);
+ pipefunc_t *funcptr = new pipefunc_t(boost::bind(voider<T>, func));
if(write(tps.writeToThread, &funcptr, sizeof(funcptr)) != sizeof(funcptr))
unixDie("write to thread pipe returned wrong size or error");
return ret;
}
-template string broadcastAccFunction(const pipefunc_t& fun, bool skipSelf); // explicit instantiation
-template uint64_t broadcastAccFunction(const pipefunc_t& fun, bool skipSelf); // explicit instantiation
+template string broadcastAccFunction(const boost::function<string*()>& fun, bool skipSelf); // explicit instantiation
+template uint64_t broadcastAccFunction(const boost::function<uint64_t*()>& fun, bool skipSelf); // explicit instantiation
void handleRCC(int fd, FDMultiplexer::funcparam_t& var)
{
return "done\n";
}
-static void* pleaseWipeCache(const std::string& canon)
+static uint64_t* pleaseWipeCache(const std::string& canon)
{
return new uint64_t(t_RC->doWipeCache(canon));
}
-static void* pleaseWipeAndCountNegCache(const std::string& canon)
+static uint64_t* pleaseWipeAndCountNegCache(const std::string& canon)
{
uint64_t res = SyncRes::t_sstorage->negcache.count(tie(canon));
pair<SyncRes::negcache_t::iterator, SyncRes::negcache_t::iterator> range=SyncRes::t_sstorage->negcache.equal_range(tie(canon));
return time(0) - g_stats.startupTime;
}
-static void* pleaseGetCurrentQueries()
+static string* pleaseGetCurrentQueries()
{
ostringstream ostr;
return broadcastAccFunction<string>(pleaseGetCurrentQueries);
}
-void* pleaseGetThrottleSize()
+uint64_t* pleaseGetThrottleSize()
{
return new uint64_t(SyncRes::t_sstorage->throttle.size());
}
return broadcastAccFunction<uint64_t>(pleaseGetThrottleSize);
}
-void* pleaseGetNegCacheSize()
+uint64_t* pleaseGetNegCacheSize()
{
uint64_t tmp=SyncRes::t_sstorage->negcache.size();
return new uint64_t(tmp);
return broadcastAccFunction<uint64_t>(pleaseGetNegCacheSize);
}
-void* pleaseGetNsSpeedsSize()
+uint64_t* pleaseGetNsSpeedsSize()
{
return new uint64_t(SyncRes::t_sstorage->nsSpeeds.size());
}
return broadcastAccFunction<uint64_t>(pleaseGetNsSpeedsSize);
}
-void* pleaseGetConcurrentQueries()
+uint64_t* pleaseGetConcurrentQueries()
{
return new uint64_t(MT->numProcesses());
}
return broadcastAccFunction<uint64_t>(pleaseGetConcurrentQueries);
}
-void* pleaseGetCacheSize()
+uint64_t* pleaseGetCacheSize()
{
return new uint64_t(t_RC->size());
}
return broadcastAccFunction<uint64_t>(pleaseGetCacheSize);
}
-void* pleaseGetCacheHits()
+uint64_t* pleaseGetCacheHits()
{
return new uint64_t(t_RC->cacheHits);
}
return broadcastAccFunction<uint64_t>(pleaseGetCacheHits);
}
-void* pleaseGetCacheMisses()
+uint64_t* pleaseGetCacheMisses()
{
return new uint64_t(t_RC->cacheMisses);
}
return ret.str();
}
-static void* nopFunction()
+static string* nopFunction()
{
return new string("pong\n");
}
void broadcastFunction(const pipefunc_t& func, bool skipSelf = false);
-template<class T> T broadcastAccFunction(const pipefunc_t& func, bool skipSelf=false);
+template<class T> T broadcastAccFunction(const boost::function<T*()>& func, bool skipSelf=false);
SyncRes::domainmap_t* parseAuthAndForwards();
-void* pleaseGetNsSpeedsSize();
-void* pleaseGetCacheSize();
-void* pleaseGetNegCacheSize();
-void* pleaseGetCacheHits();
-void* pleaseGetCacheMisses();
-void* pleaseGetConcurrentQueries();
-void* pleaseGetThrottleSize();
+uint64_t* pleaseGetNsSpeedsSize();
+uint64_t* pleaseGetCacheSize();
+uint64_t* pleaseGetNegCacheSize();
+uint64_t* pleaseGetCacheHits();
+uint64_t* pleaseGetCacheMisses();
+uint64_t* pleaseGetConcurrentQueries();
+uint64_t* pleaseGetThrottleSize();
#endif