summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/msg.c10
-rw-r--r--common/msg_control.h4
2 files changed, 12 insertions, 2 deletions
diff --git a/common/msg.c b/common/msg.c
index d2e728b585..fa8b235243 100644
--- a/common/msg.c
+++ b/common/msg.c
@@ -82,6 +82,8 @@ struct mp_log_buffer {
struct mp_log_root *root;
struct mp_ring *ring;
int level;
+ void (*wakeup_cb)(void *ctx);
+ void *wakeup_cb_ctx;
};
// Protects some (not all) state in mp_log_root
@@ -319,6 +321,8 @@ static void write_msg_to_buffers(struct mp_log *log, int lev, char *text)
};
}
mp_ring_write(buffer->ring, (unsigned char *)&entry, sizeof(entry));
+ if (buffer->wakeup_cb)
+ buffer->wakeup_cb(buffer->wakeup_cb_ctx);
}
}
}
@@ -459,7 +463,9 @@ void mp_msg_uninit(struct mpv_global *global)
}
struct mp_log_buffer *mp_msg_log_buffer_new(struct mpv_global *global,
- int size, int level)
+ int size, int level,
+ void (*wakeup_cb)(void *ctx),
+ void *wakeup_cb_ctx)
{
struct mp_log_root *root = global->log->root;
@@ -470,6 +476,8 @@ struct mp_log_buffer *mp_msg_log_buffer_new(struct mpv_global *global,
.root = root,
.level = level,
.ring = mp_ring_new(buffer, sizeof(void *) * size),
+ .wakeup_cb = wakeup_cb,
+ .wakeup_cb_ctx = wakeup_cb_ctx,
};
if (!buffer->ring)
abort();
diff --git a/common/msg_control.h b/common/msg_control.h
index 49eeee025c..755cd10e57 100644
--- a/common/msg_control.h
+++ b/common/msg_control.h
@@ -20,7 +20,9 @@ struct mp_log_buffer_entry {
struct mp_log_buffer;
struct mp_log_buffer *mp_msg_log_buffer_new(struct mpv_global *global,
- int size, int level);
+ int size, int level,
+ void (*wakeup_cb)(void *ctx),
+ void *wakeup_cb_ctx);
void mp_msg_log_buffer_destroy(struct mp_log_buffer *buffer);
struct mp_log_buffer_entry *mp_msg_log_buffer_read(struct mp_log_buffer *buffer);