aboutsummaryrefslogtreecommitdiff
path: root/tests/utils/adbd-server.h
diff options
context:
space:
mode:
authorCharles Kerr <charles.kerr@canonical.com>2016-04-23 12:29:45 +0200
committerCharles Kerr <charles.kerr@canonical.com>2016-04-23 12:29:45 +0200
commit0f5534d22903f73e2d33ea2e29efb2307463bfa4 (patch)
treecfcebfaf499a8d5ec58e80155a0e0ea4bce984c5 /tests/utils/adbd-server.h
parentce5234162fa0c534ff9abf3fce3d03f4b01e893e (diff)
downloadayatana-indicator-display-0f5534d22903f73e2d33ea2e29efb2307463bfa4.tar.gz
ayatana-indicator-display-0f5534d22903f73e2d33ea2e29efb2307463bfa4.tar.bz2
ayatana-indicator-display-0f5534d22903f73e2d33ea2e29efb2307463bfa4.zip
in tests/utils/adbd-server.h, fix a timing bug in the test scaffolding by creating the adb socket in AdbdServer's ctor instead of in its worker thread.
Diffstat (limited to 'tests/utils/adbd-server.h')
-rw-r--r--tests/utils/adbd-server.h20
1 files changed, 9 insertions, 11 deletions
diff --git a/tests/utils/adbd-server.h b/tests/utils/adbd-server.h
index b574622..585380f 100644
--- a/tests/utils/adbd-server.h
+++ b/tests/utils/adbd-server.h
@@ -38,7 +38,7 @@ public:
GAdbdServer(const std::string& socket_path,
const std::vector<std::string>& requests):
m_requests{requests},
- m_socket_path{socket_path},
+ m_server_socket{create_server_socket(socket_path)},
m_cancellable{g_cancellable_new()},
m_worker_thread{&GAdbdServer::worker_func, this}
{
@@ -50,6 +50,7 @@ public:
g_cancellable_cancel(m_cancellable);
m_worker_thread.join();
g_clear_object(&m_cancellable);
+ g_clear_object(&m_server_socket);
}
const std::vector<std::string> m_requests;
@@ -59,18 +60,14 @@ private:
void worker_func() // runs in worker thread
{
- auto server_socket = create_server_socket(m_socket_path);
auto requests = m_requests;
- GError* error {};
- g_socket_listen (server_socket, &error);
- g_assert_no_error (error);
-
while (!g_cancellable_is_cancelled(m_cancellable) && !requests.empty())
{
// wait for a client connection
g_message("GAdbdServer::Impl::worker_func() calling g_socket_accept()");
- auto client_socket = g_socket_accept(server_socket, m_cancellable, &error);
+ GError* error {};
+ auto client_socket = g_socket_accept(m_server_socket, m_cancellable, &error);
if (error != nullptr) {
if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
g_message("GAdbdServer: Error accepting socket connection: %s", error->message);
@@ -121,8 +118,6 @@ private:
// cleanup
g_clear_object(&client_socket);
}
-
- g_clear_object(&server_socket);
}
// bind to a local domain socket
@@ -139,11 +134,14 @@ private:
g_assert_no_error (error);
g_clear_object (&address);
+ g_socket_listen (socket, &error);
+ g_assert_no_error (error);
+
return socket;
}
- const std::string m_socket_path;
- GCancellable* m_cancellable = nullptr;
+ GSocket* m_server_socket {};
+ GCancellable* m_cancellable {};
std::thread m_worker_thread;
};