aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2010-10-16 16:44:31 +0200
committerMarcel Holtmann <marcel@holtmann.org>2010-10-16 16:44:31 +0200
commitc8e6d5a000980d9465f084a7506ecb1a2085effe (patch)
tree0fc398cce627d01a789a9bfd3765eea4e1efb1f2
parent3b1dd36f27368aae26248c5bfda38af77d2770dc (diff)
downloadpacrunner-c8e6d5a000980d9465f084a7506ecb1a2085effe.tar.gz
Protect list of active proxies with a mutex
-rw-r--r--src/proxy.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/proxy.c b/src/proxy.c
index e02df8e..755a8ce 100644
--- a/src/proxy.c
+++ b/src/proxy.c
@@ -252,6 +252,7 @@ int pacrunner_proxy_set_server(struct pacrunner_proxy *proxy,
}
static GList *proxy_list = NULL;
+static GStaticMutex proxy_mutex = G_STATIC_MUTEX_INIT;
int pacrunner_proxy_enable(struct pacrunner_proxy *proxy)
{
@@ -272,7 +273,9 @@ int pacrunner_proxy_enable(struct pacrunner_proxy *proxy)
__pacrunner_mozjs_set_proxy(proxy);
+ g_static_mutex_lock(&proxy_mutex);
proxy_list = g_list_append(proxy_list, proxy);
+ g_static_mutex_unlock(&proxy_mutex);
return 0;
}
@@ -290,7 +293,9 @@ int pacrunner_proxy_disable(struct pacrunner_proxy *proxy)
if (list == NULL)
return -ENXIO;
+ g_static_mutex_lock(&proxy_mutex);
proxy_list = g_list_remove_link(proxy_list, list);
+ g_static_mutex_unlock(&proxy_mutex);
__pacrunner_mozjs_set_proxy(NULL);
@@ -309,6 +314,8 @@ const char *pacrunner_proxy_lookup(const char *url, const char *host)
if (proxy_list == NULL)
return "DIRECT";
+ g_static_mutex_lock(&proxy_mutex);
+
for (list = g_list_first(proxy_list); list; list = g_list_next(list)) {
struct pacrunner_proxy *proxy = list->data;
@@ -320,6 +327,8 @@ const char *pacrunner_proxy_lookup(const char *url, const char *host)
selected_proxy = proxy;
}
+ g_static_mutex_unlock(&proxy_mutex);
+
if (selected_proxy == NULL)
return "DIRECT";