From 9be264e1762c2e7a5159479230ce98cae0721e07 Mon Sep 17 00:00:00 2001 From: Devaev Maxim Date: Mon, 18 Jan 2021 11:27:57 +0300 Subject: [PATCH] memsink magic --- src/libs/memsink.c | 34 +++++++++++++++++++--------------- src/libs/memsink.h | 3 +++ 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/src/libs/memsink.c b/src/libs/memsink.c index f60f38b..548460a 100644 --- a/src/libs/memsink.c +++ b/src/libs/memsink.c @@ -146,6 +146,7 @@ int memsink_server_put(memsink_s *sink, const frame_s *frame) { COPY(encode_end_ts); sink->has_clients = (sink->mem->last_client_ts + sink->client_ttl > get_now_monotonic()); memcpy(sink->mem->data, frame->data, frame->used); + sink->mem->magic = MEMSINK_MAGIC; # undef COPY if (flock(sink->fd, LOCK_UN) < 0) { @@ -176,22 +177,25 @@ int memsink_client_get(memsink_s *sink, frame_s *frame) { // cppcheck-suppress u return -1; } - bool updated = (sink->mem->id != sink->last_id); - if (updated) { -# define COPY(_field) frame->_field = sink->mem->_field - sink->last_id = sink->mem->id; - COPY(width); - COPY(height); - COPY(format); - COPY(stride); - COPY(online); - COPY(grab_ts); - COPY(encode_begin_ts); - COPY(encode_end_ts); - frame_set_data(frame, sink->mem->data, sink->mem->used); -# undef COPY + bool updated = false; + if (sink->mem->magic == MEMSINK_MAGIC) { + updated = (sink->mem->id != sink->last_id); + if (updated) { +# define COPY(_field) frame->_field = sink->mem->_field + sink->last_id = sink->mem->id; + COPY(width); + COPY(height); + COPY(format); + COPY(stride); + COPY(online); + COPY(grab_ts); + COPY(encode_begin_ts); + COPY(encode_end_ts); + frame_set_data(frame, sink->mem->data, sink->mem->used); +# undef COPY + } + sink->mem->last_client_ts = get_now_monotonic(); } - sink->mem->last_client_ts = get_now_monotonic(); if (flock(sink->fd, LOCK_UN) < 0) { LOG_PERROR("%s-sink: Can't unlock memory", sink->name); diff --git a/src/libs/memsink.h b/src/libs/memsink.h index 637206f..ca13207 100644 --- a/src/libs/memsink.h +++ b/src/libs/memsink.h @@ -39,6 +39,8 @@ #include "frame.h" +#define MEMSINK_MAGIC ((uint64_t)0xCAFEBABECAFEBABE) + #ifndef CFG_MEMSINK_MAX_DATA # define CFG_MEMSINK_MAX_DATA 33554432 #endif @@ -46,6 +48,7 @@ typedef struct { + uint64_t magic; uint64_t id; size_t used; unsigned width;