diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2010-10-16 16:44:31 +0200 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2010-10-16 16:44:31 +0200 |
commit | c8e6d5a000980d9465f084a7506ecb1a2085effe (patch) | |
tree | 0fc398cce627d01a789a9bfd3765eea4e1efb1f2 | |
parent | 3b1dd36f27368aae26248c5bfda38af77d2770dc (diff) | |
download | pacrunner-c8e6d5a000980d9465f084a7506ecb1a2085effe.tar.gz |
Protect list of active proxies with a mutex
-rw-r--r-- | src/proxy.c | 9 |
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"; |