summaryrefslogtreecommitdiff
path: root/src/IOThread.cxx
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2013-08-07 22:42:45 +0200
committerMax Kellermann <max@duempel.org>2013-08-08 23:04:07 +0200
commit018f4155eb7b476b96a7b401377be78e00ca7dd2 (patch)
treefb7b46b83a8850e426a2c80f3734d14547843afe /src/IOThread.cxx
parent9ab0a1f5f16b475199540349905e4d79001b8cec (diff)
event: add function BlockingCall()
Replaces io_thread_call(). This approach is more generic and easier to use due to std::function.
Diffstat (limited to 'src/IOThread.cxx')
-rw-r--r--src/IOThread.cxx50
1 files changed, 0 insertions, 50 deletions
diff --git a/src/IOThread.cxx b/src/IOThread.cxx
index ef0cec4d6..cba9c9263 100644
--- a/src/IOThread.cxx
+++ b/src/IOThread.cxx
@@ -115,53 +115,3 @@ io_thread_inside(void)
{
return io.thread != NULL && g_thread_self() == io.thread;
}
-
-struct call_data {
- GThreadFunc function;
- gpointer data;
- bool done;
- gpointer result;
-};
-
-static gboolean
-io_thread_call_func(gpointer _data)
-{
- struct call_data *data = (struct call_data *)_data;
-
- gpointer result = data->function(data->data);
-
- io.mutex.lock();
- data->done = true;
- data->result = result;
- io.cond.broadcast();
- io.mutex.unlock();
-
- return false;
-}
-
-gpointer
-io_thread_call(GThreadFunc function, gpointer _data)
-{
- assert(io.thread != NULL);
-
- if (io_thread_inside())
- /* we're already in the I/O thread - no
- synchronization needed */
- return function(_data);
-
- struct call_data data = {
- function,
- _data,
- false,
- nullptr,
- };
-
- io.loop->AddIdle(io_thread_call_func, &data);
-
- io.mutex.lock();
- while (!data.done)
- io.cond.wait(io.mutex);
- io.mutex.unlock();
-
- return data.result;
-}