summaryrefslogtreecommitdiffstats
path: root/src/pulse/ext-stream-restore.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2009-03-05 04:33:40 +0100
committerLennart Poettering <lennart@poettering.net>2009-03-05 04:33:40 +0100
commit3122008704ad07fe4982de0e642576ca7613d7bf (patch)
tree9b95a7dfd4d5e88f2a517ea66a66b5af78e45fe9 /src/pulse/ext-stream-restore.c
parent9d29b96ac08c2762b27f6b191ec5807ee3ce58e7 (diff)
try to detect when stupid clients forks and refuse all service from then on
Diffstat (limited to 'src/pulse/ext-stream-restore.c')
-rw-r--r--src/pulse/ext-stream-restore.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/pulse/ext-stream-restore.c b/src/pulse/ext-stream-restore.c
index 809c6a4c..63c911f8 100644
--- a/src/pulse/ext-stream-restore.c
+++ b/src/pulse/ext-stream-restore.c
@@ -31,6 +31,7 @@
#include "internal.h"
#include "operation.h"
+#include "fork-detect.h"
#include "ext-stream-restore.h"
@@ -87,6 +88,7 @@ pa_operation *pa_ext_stream_restore_test(
pa_assert(c);
pa_assert(PA_REFCNT_VALUE(c) >= 1);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 14, PA_ERR_NOTSUPPORTED);
@@ -167,6 +169,7 @@ pa_operation *pa_ext_stream_restore_read(
pa_assert(c);
pa_assert(PA_REFCNT_VALUE(c) >= 1);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 14, PA_ERR_NOTSUPPORTED);
@@ -200,6 +203,7 @@ pa_operation *pa_ext_stream_restore_write(
pa_assert(mode == PA_UPDATE_MERGE || mode == PA_UPDATE_REPLACE || mode == PA_UPDATE_SET);
pa_assert(data);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 14, PA_ERR_NOTSUPPORTED);
@@ -262,6 +266,7 @@ pa_operation *pa_ext_stream_restore_delete(
pa_assert(PA_REFCNT_VALUE(c) >= 1);
pa_assert(s);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 14, PA_ERR_NOTSUPPORTED);
@@ -310,6 +315,7 @@ pa_operation *pa_ext_stream_restore_subscribe(
pa_assert(c);
pa_assert(PA_REFCNT_VALUE(c) >= 1);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 14, PA_ERR_NOTSUPPORTED);
@@ -334,6 +340,9 @@ void pa_ext_stream_restore_set_subscribe_cb(
pa_assert(c);
pa_assert(PA_REFCNT_VALUE(c) >= 1);
+ if (pa_detect_fork())
+ return;
+
c->ext_stream_restore.callback = cb;
c->ext_stream_restore.userdata = userdata;
}