Browse Source

[master] use a wrapper for passing boost::function to io_service::post()

this works as a workaround for a build failure with SunStudio.
JINMEI Tatuya 12 years ago
parent
commit
e3c5c430e6
1 changed files with 18 additions and 1 deletions
  1. 18 1
      src/lib/asiolink/io_service.cc

+ 18 - 1
src/lib/asiolink/io_service.cc

@@ -24,6 +24,23 @@
 namespace isc {
 namespace asiolink {
 
+namespace {
+// A trivial wrapper for boost::function.  SunStudio doesn't seem to be capable
+// of handling a boost::function object if directly passed to
+// io_service::post().
+class CallbackWrapper {
+public:
+    CallbackWrapper(const boost::function<void()>& callback) :
+        callback_(callback)
+    {}
+    void operator()() {
+        callback_();
+    }
+private:
+    boost::function<void()> callback_;
+};
+}
+
 class IOServiceImpl {
 private:
     IOServiceImpl(const IOService& source);
@@ -64,7 +81,7 @@ public:
     /// generalized.
     asio::io_service& get_io_service() { return io_service_; };
     void post(const boost::function<void ()>& callback) {
-        io_service_.post(callback);
+        io_service_.post(CallbackWrapper(callback));
     }
 private:
     asio::io_service io_service_;