diff options
Diffstat (limited to 'src/pulse/stream.c')
| -rw-r--r-- | src/pulse/stream.c | 65 | 
1 files changed, 65 insertions, 0 deletions
diff --git a/src/pulse/stream.c b/src/pulse/stream.c index 2455fe7b..9a0ea0fd 100644 --- a/src/pulse/stream.c +++ b/src/pulse/stream.c @@ -38,6 +38,7 @@  #include <pulsecore/macro.h>  #include <pulsecore/rtclock.h> +#include "fork-detect.h"  #include "internal.h"  #define LATENCY_IPOL_INTERVAL_USEC (333*PA_USEC_PER_MSEC) @@ -87,6 +88,7 @@ pa_stream *pa_stream_new_with_proplist(      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, ss && pa_sample_spec_valid(ss), PA_ERR_INVALID);      PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 12 || (ss->format != PA_SAMPLE_S32LE && ss->format != PA_SAMPLE_S32BE), PA_ERR_NOTSUPPORTED);      PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 15 || (ss->format != PA_SAMPLE_S24LE && ss->format != PA_SAMPLE_S24BE), PA_ERR_NOTSUPPORTED); @@ -267,6 +269,7 @@ uint32_t pa_stream_get_index(pa_stream *s) {      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY_RETURN_ANY(s->context, !pa_detect_fork(), PA_ERR_FORKED, PA_INVALID_INDEX);      PA_CHECK_VALIDITY_RETURN_ANY(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE, PA_INVALID_INDEX);      return s->stream_index; @@ -921,6 +924,7 @@ static int create_stream(      pa_assert(PA_REFCNT_VALUE(s) >= 1);      pa_assert(direction == PA_STREAM_PLAYBACK || direction == PA_STREAM_RECORD); +    PA_CHECK_VALIDITY(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY(s->context, s->state == PA_STREAM_UNCONNECTED, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY(s->context, s->direct_on_input == PA_INVALID_INDEX || direction == PA_STREAM_RECORD, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY(s->context, !(flags & ~(PA_STREAM_START_CORKED| @@ -1122,6 +1126,7 @@ int pa_stream_write(      pa_assert(PA_REFCNT_VALUE(s) >= 1);      pa_assert(data); +    PA_CHECK_VALIDITY(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY(s->context, s->direction == PA_STREAM_PLAYBACK || s->direction == PA_STREAM_UPLOAD, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY(s->context, seek <= PA_SEEK_RELATIVE_END, PA_ERR_INVALID); @@ -1216,6 +1221,7 @@ int pa_stream_peek(pa_stream *s, const void **data, size_t *length) {      pa_assert(data);      pa_assert(length); +    PA_CHECK_VALIDITY(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY(s->context, s->direction == PA_STREAM_RECORD, PA_ERR_BADSTATE); @@ -1240,6 +1246,7 @@ int pa_stream_drop(pa_stream *s) {      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY(s->context, s->direction == PA_STREAM_RECORD, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY(s->context, s->peek_memchunk.memblock, PA_ERR_BADSTATE); @@ -1262,6 +1269,7 @@ size_t pa_stream_writable_size(pa_stream *s) {      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY_RETURN_ANY(s->context, !pa_detect_fork(), PA_ERR_FORKED, (size_t) -1);      PA_CHECK_VALIDITY_RETURN_ANY(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE, (size_t) -1);      PA_CHECK_VALIDITY_RETURN_ANY(s->context, s->direction != PA_STREAM_RECORD, PA_ERR_BADSTATE, (size_t) -1); @@ -1272,6 +1280,7 @@ size_t pa_stream_readable_size(pa_stream *s) {      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY_RETURN_ANY(s->context, !pa_detect_fork(), PA_ERR_FORKED, (size_t) -1);      PA_CHECK_VALIDITY_RETURN_ANY(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE, (size_t) -1);      PA_CHECK_VALIDITY_RETURN_ANY(s->context, s->direction == PA_STREAM_RECORD, PA_ERR_BADSTATE, (size_t) -1); @@ -1286,6 +1295,7 @@ pa_operation * pa_stream_drain(pa_stream *s, pa_stream_success_cb_t cb, void *us      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY_RETURN_NULL(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->direction == PA_STREAM_PLAYBACK, PA_ERR_BADSTATE); @@ -1557,6 +1567,7 @@ pa_operation* pa_stream_update_timing_info(pa_stream *s, pa_stream_success_cb_t      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY_RETURN_NULL(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->direction != PA_STREAM_UPLOAD, PA_ERR_BADSTATE); @@ -1627,6 +1638,7 @@ int pa_stream_disconnect(pa_stream *s) {      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY(s->context, s->channel_valid, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY(s->context, s->context->state == PA_CONTEXT_READY, PA_ERR_BADSTATE); @@ -1649,6 +1661,9 @@ void pa_stream_set_read_callback(pa_stream *s, pa_stream_request_cb_t cb, void *      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    if (pa_detect_fork()) +        return; +      if (s->state == PA_STREAM_TERMINATED || s->state == PA_STREAM_FAILED)          return; @@ -1660,6 +1675,9 @@ void pa_stream_set_write_callback(pa_stream *s, pa_stream_request_cb_t cb, void      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    if (pa_detect_fork()) +        return; +      if (s->state == PA_STREAM_TERMINATED || s->state == PA_STREAM_FAILED)          return; @@ -1671,6 +1689,9 @@ void pa_stream_set_state_callback(pa_stream *s, pa_stream_notify_cb_t cb, void *      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    if (pa_detect_fork()) +        return; +      if (s->state == PA_STREAM_TERMINATED || s->state == PA_STREAM_FAILED)          return; @@ -1682,6 +1703,9 @@ void pa_stream_set_overflow_callback(pa_stream *s, pa_stream_notify_cb_t cb, voi      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    if (pa_detect_fork()) +        return; +      if (s->state == PA_STREAM_TERMINATED || s->state == PA_STREAM_FAILED)          return; @@ -1693,6 +1717,9 @@ void pa_stream_set_underflow_callback(pa_stream *s, pa_stream_notify_cb_t cb, vo      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    if (pa_detect_fork()) +        return; +      if (s->state == PA_STREAM_TERMINATED || s->state == PA_STREAM_FAILED)          return; @@ -1704,6 +1731,9 @@ void pa_stream_set_latency_update_callback(pa_stream *s, pa_stream_notify_cb_t c      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    if (pa_detect_fork()) +        return; +      if (s->state == PA_STREAM_TERMINATED || s->state == PA_STREAM_FAILED)          return; @@ -1715,6 +1745,9 @@ void pa_stream_set_moved_callback(pa_stream *s, pa_stream_notify_cb_t cb, void *      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    if (pa_detect_fork()) +        return; +      if (s->state == PA_STREAM_TERMINATED || s->state == PA_STREAM_FAILED)          return; @@ -1726,6 +1759,9 @@ void pa_stream_set_suspended_callback(pa_stream *s, pa_stream_notify_cb_t cb, vo      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    if (pa_detect_fork()) +        return; +      if (s->state == PA_STREAM_TERMINATED || s->state == PA_STREAM_FAILED)          return; @@ -1737,6 +1773,9 @@ void pa_stream_set_started_callback(pa_stream *s, pa_stream_notify_cb_t cb, void      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    if (pa_detect_fork()) +        return; +      if (s->state == PA_STREAM_TERMINATED || s->state == PA_STREAM_FAILED)          return; @@ -1748,6 +1787,9 @@ void pa_stream_set_event_callback(pa_stream *s, pa_stream_event_cb_t cb, void *u      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    if (pa_detect_fork()) +        return; +      if (s->state == PA_STREAM_TERMINATED || s->state == PA_STREAM_FAILED)          return; @@ -1794,6 +1836,7 @@ pa_operation* pa_stream_cork(pa_stream *s, int b, pa_stream_success_cb_t cb, voi      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY_RETURN_NULL(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->direction != PA_STREAM_UPLOAD, PA_ERR_BADSTATE); @@ -1827,6 +1870,7 @@ static pa_operation* stream_send_simple_command(pa_stream *s, uint32_t command,      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY_RETURN_NULL(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);      o = pa_operation_new(s->context, s, (pa_operation_cb_t) cb, userdata); @@ -1845,6 +1889,7 @@ pa_operation* pa_stream_flush(pa_stream *s, pa_stream_success_cb_t cb, void *use      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY_RETURN_NULL(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->direction != PA_STREAM_UPLOAD, PA_ERR_BADSTATE); @@ -1877,6 +1922,7 @@ pa_operation* pa_stream_prebuf(pa_stream *s, pa_stream_success_cb_t cb, void *us      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY_RETURN_NULL(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->direction == PA_STREAM_PLAYBACK, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->buffer_attr.prebuf > 0, PA_ERR_BADSTATE); @@ -1897,6 +1943,7 @@ pa_operation* pa_stream_trigger(pa_stream *s, pa_stream_success_cb_t cb, void *u      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY_RETURN_NULL(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->direction == PA_STREAM_PLAYBACK, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->buffer_attr.prebuf > 0, PA_ERR_BADSTATE); @@ -1918,6 +1965,7 @@ pa_operation* pa_stream_set_name(pa_stream *s, const char *name, pa_stream_succe      pa_assert(PA_REFCNT_VALUE(s) >= 1);      pa_assert(name); +    PA_CHECK_VALIDITY_RETURN_NULL(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->direction != PA_STREAM_UPLOAD, PA_ERR_BADSTATE); @@ -1951,6 +1999,7 @@ int pa_stream_get_time(pa_stream *s, pa_usec_t *r_usec) {      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY(s->context, s->direction != PA_STREAM_UPLOAD, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY(s->context, s->timing_info_valid, PA_ERR_NODATA); @@ -2003,6 +2052,7 @@ int pa_stream_get_latency(pa_stream *s, pa_usec_t *r_usec, int *negative) {      pa_assert(PA_REFCNT_VALUE(s) >= 1);      pa_assert(r_usec); +    PA_CHECK_VALIDITY(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY(s->context, s->direction != PA_STREAM_UPLOAD, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY(s->context, s->timing_info_valid, PA_ERR_NODATA); @@ -2034,6 +2084,7 @@ const pa_timing_info* pa_stream_get_timing_info(pa_stream *s) {      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY_RETURN_NULL(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->direction != PA_STREAM_UPLOAD, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->timing_info_valid, PA_ERR_NODATA); @@ -2045,6 +2096,8 @@ const pa_sample_spec* pa_stream_get_sample_spec(pa_stream *s) {      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY_RETURN_NULL(s->context, !pa_detect_fork(), PA_ERR_FORKED); +      return &s->sample_spec;  } @@ -2052,6 +2105,8 @@ const pa_channel_map* pa_stream_get_channel_map(pa_stream *s) {      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY_RETURN_NULL(s->context, !pa_detect_fork(), PA_ERR_FORKED); +      return &s->channel_map;  } @@ -2139,6 +2194,7 @@ pa_operation* pa_stream_set_buffer_attr(pa_stream *s, const pa_buffer_attr *attr      pa_assert(PA_REFCNT_VALUE(s) >= 1);      pa_assert(attr); +    PA_CHECK_VALIDITY_RETURN_NULL(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->direction != PA_STREAM_UPLOAD, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->context->version >= 12, PA_ERR_NOTSUPPORTED); @@ -2183,6 +2239,7 @@ uint32_t pa_stream_get_device_index(pa_stream *s) {      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY_RETURN_ANY(s->context, !pa_detect_fork(), PA_ERR_FORKED, PA_INVALID_INDEX);      PA_CHECK_VALIDITY_RETURN_ANY(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE, PA_INVALID_INDEX);      PA_CHECK_VALIDITY_RETURN_ANY(s->context, s->direction != PA_STREAM_UPLOAD, PA_ERR_BADSTATE, PA_INVALID_INDEX);      PA_CHECK_VALIDITY_RETURN_ANY(s->context, s->context->version >= 12, PA_ERR_NOTSUPPORTED, PA_INVALID_INDEX); @@ -2195,6 +2252,7 @@ const char *pa_stream_get_device_name(pa_stream *s) {      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY_RETURN_NULL(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->direction != PA_STREAM_UPLOAD, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->context->version >= 12, PA_ERR_NOTSUPPORTED); @@ -2207,6 +2265,7 @@ int pa_stream_is_suspended(pa_stream *s) {      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY(s->context, s->direction != PA_STREAM_UPLOAD, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY(s->context, s->context->version >= 12, PA_ERR_NOTSUPPORTED); @@ -2218,6 +2277,7 @@ int pa_stream_is_corked(pa_stream *s) {      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY(s->context, s->direction != PA_STREAM_UPLOAD, PA_ERR_BADSTATE); @@ -2270,6 +2330,7 @@ pa_operation *pa_stream_update_sample_rate(pa_stream *s, uint32_t rate, pa_strea      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY_RETURN_NULL(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, rate > 0 && rate <= PA_RATE_MAX, PA_ERR_INVALID);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->direction != PA_STREAM_UPLOAD, PA_ERR_BADSTATE); @@ -2300,6 +2361,7 @@ pa_operation *pa_stream_proplist_update(pa_stream *s, pa_update_mode_t mode, pa_      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY_RETURN_NULL(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, mode == PA_UPDATE_SET || mode == PA_UPDATE_MERGE || mode == PA_UPDATE_REPLACE, PA_ERR_INVALID);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->direction != PA_STREAM_UPLOAD, PA_ERR_BADSTATE); @@ -2333,6 +2395,7 @@ pa_operation *pa_stream_proplist_remove(pa_stream *s, const char *const keys[],      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY_RETURN_NULL(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, keys && keys[0], PA_ERR_INVALID);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->direction != PA_STREAM_UPLOAD, PA_ERR_BADSTATE); @@ -2364,6 +2427,7 @@ int pa_stream_set_monitor_stream(pa_stream *s, uint32_t sink_input_idx) {      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY(s->context, !pa_detect_fork(), PA_ERR_FORKED);      PA_CHECK_VALIDITY(s->context, sink_input_idx != PA_INVALID_INDEX, PA_ERR_INVALID);      PA_CHECK_VALIDITY(s->context, s->state == PA_STREAM_UNCONNECTED, PA_ERR_BADSTATE);      PA_CHECK_VALIDITY(s->context, s->context->version >= 13, PA_ERR_NOTSUPPORTED); @@ -2377,6 +2441,7 @@ uint32_t pa_stream_get_monitor_stream(pa_stream *s) {      pa_assert(s);      pa_assert(PA_REFCNT_VALUE(s) >= 1); +    PA_CHECK_VALIDITY_RETURN_ANY(s->context, !pa_detect_fork(), PA_ERR_FORKED, PA_INVALID_INDEX);      PA_CHECK_VALIDITY_RETURN_ANY(s->context, s->direct_on_input != PA_INVALID_INDEX, PA_ERR_BADSTATE, PA_INVALID_INDEX);      PA_CHECK_VALIDITY_RETURN_ANY(s->context, s->context->version >= 13, PA_ERR_NOTSUPPORTED, PA_INVALID_INDEX);  | 
