mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-01 22:58:50 -04:00
log: add topic for data and thread loop
This commit is contained in:
parent
f0085b383e
commit
e9af0e4ef8
3 changed files with 40 additions and 33 deletions
|
|
@ -31,7 +31,8 @@
|
|||
#include "pipewire/private.h"
|
||||
#include "pipewire/thread.h"
|
||||
|
||||
#define NAME "data-loop"
|
||||
PW_LOG_TOPIC_EXTERN(log_data_loop);
|
||||
#define PW_LOG_TOPIC_DEFAULT log_data_loop
|
||||
|
||||
SPA_EXPORT
|
||||
int pw_data_loop_wait(struct pw_data_loop *this, int timeout)
|
||||
|
|
@ -61,7 +62,7 @@ void pw_data_loop_exit(struct pw_data_loop *this)
|
|||
static void thread_cleanup(void *arg)
|
||||
{
|
||||
struct pw_data_loop *this = arg;
|
||||
pw_log_debug(NAME" %p: leave thread", this);
|
||||
pw_log_debug("%p: leave thread", this);
|
||||
this->running = false;
|
||||
pw_loop_leave(this->loop);
|
||||
}
|
||||
|
|
@ -71,7 +72,7 @@ static void *do_loop(void *user_data)
|
|||
struct pw_data_loop *this = user_data;
|
||||
int res;
|
||||
|
||||
pw_log_debug(NAME" %p: enter thread", this);
|
||||
pw_log_debug("%p: enter thread", this);
|
||||
pw_loop_enter(this->loop);
|
||||
|
||||
pthread_cleanup_push(thread_cleanup, this);
|
||||
|
|
@ -80,7 +81,7 @@ static void *do_loop(void *user_data)
|
|||
if ((res = pw_loop_iterate(this->loop, -1)) < 0) {
|
||||
if (res == -EINTR)
|
||||
continue;
|
||||
pw_log_error(NAME" %p: iterate error %d (%s)",
|
||||
pw_log_error("%p: iterate error %d (%s)",
|
||||
this, res, spa_strerror(res));
|
||||
}
|
||||
}
|
||||
|
|
@ -92,7 +93,7 @@ static void *do_loop(void *user_data)
|
|||
static void do_stop(void *data, uint64_t count)
|
||||
{
|
||||
struct pw_data_loop *this = data;
|
||||
pw_log_debug(NAME" %p: stopping", this);
|
||||
pw_log_debug("%p: stopping", this);
|
||||
this->running = false;
|
||||
}
|
||||
|
||||
|
|
@ -108,7 +109,7 @@ static struct pw_data_loop *loop_new(struct pw_loop *loop, const struct spa_dict
|
|||
goto error_cleanup;
|
||||
}
|
||||
|
||||
pw_log_debug(NAME" %p: new", this);
|
||||
pw_log_debug("%p: new", this);
|
||||
|
||||
if (loop == NULL) {
|
||||
loop = pw_loop_new(props);
|
||||
|
|
@ -116,7 +117,7 @@ static struct pw_data_loop *loop_new(struct pw_loop *loop, const struct spa_dict
|
|||
}
|
||||
if (loop == NULL) {
|
||||
res = -errno;
|
||||
pw_log_error(NAME" %p: can't create loop: %m", this);
|
||||
pw_log_error("%p: can't create loop: %m", this);
|
||||
goto error_free;
|
||||
}
|
||||
this->loop = loop;
|
||||
|
|
@ -127,7 +128,7 @@ static struct pw_data_loop *loop_new(struct pw_loop *loop, const struct spa_dict
|
|||
this->event = pw_loop_add_event(this->loop, do_stop, this);
|
||||
if (this->event == NULL) {
|
||||
res = -errno;
|
||||
pw_log_error(NAME" %p: can't add event: %m", this);
|
||||
pw_log_error("%p: can't add event: %m", this);
|
||||
goto error_loop_destroy;
|
||||
}
|
||||
}
|
||||
|
|
@ -162,7 +163,7 @@ struct pw_data_loop *pw_data_loop_new(const struct spa_dict *props)
|
|||
SPA_EXPORT
|
||||
void pw_data_loop_destroy(struct pw_data_loop *loop)
|
||||
{
|
||||
pw_log_debug(NAME" %p: destroy", loop);
|
||||
pw_log_debug("%p: destroy", loop);
|
||||
|
||||
pw_data_loop_emit_destroy(loop);
|
||||
|
||||
|
|
@ -211,7 +212,7 @@ int pw_data_loop_start(struct pw_data_loop *loop)
|
|||
thr = pw_thread_utils_create(NULL, do_loop, loop);
|
||||
loop->thread = (pthread_t)thr;
|
||||
if (thr == NULL) {
|
||||
pw_log_error(NAME" %p: can't create thread: %m", loop);
|
||||
pw_log_error("%p: can't create thread: %m", loop);
|
||||
loop->running = false;
|
||||
return -errno;
|
||||
}
|
||||
|
|
@ -229,20 +230,20 @@ int pw_data_loop_start(struct pw_data_loop *loop)
|
|||
SPA_EXPORT
|
||||
int pw_data_loop_stop(struct pw_data_loop *loop)
|
||||
{
|
||||
pw_log_debug(NAME": %p stopping", loop);
|
||||
pw_log_debug("%p stopping", loop);
|
||||
if (loop->running) {
|
||||
if (loop->event) {
|
||||
pw_log_debug(NAME": %p signal", loop);
|
||||
pw_log_debug("%p signal", loop);
|
||||
pw_loop_signal_event(loop->loop, loop->event);
|
||||
} else {
|
||||
pw_log_debug(NAME": %p cancel", loop);
|
||||
pw_log_debug("%p cancel", loop);
|
||||
pthread_cancel(loop->thread);
|
||||
}
|
||||
pw_log_debug(NAME": %p join", loop);
|
||||
pw_log_debug("%p join", loop);
|
||||
pw_thread_utils_join((struct spa_thread*)loop->thread, NULL);
|
||||
pw_log_debug(NAME": %p joined", loop);
|
||||
pw_log_debug("%p joined", loop);
|
||||
}
|
||||
pw_log_debug(NAME": %p stopped", loop);
|
||||
pw_log_debug("%p stopped", loop);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ PW_LOG_TOPIC_STATIC(log_topic, "pw.log"); /* log topic for this file here */
|
|||
PW_LOG_TOPIC(log_buffers, "pw.buffers");
|
||||
PW_LOG_TOPIC(log_conf, "pw.conf");
|
||||
PW_LOG_TOPIC(log_context, "pw.context");
|
||||
PW_LOG_TOPIC(log_data_loop, "pw.data-loop");
|
||||
PW_LOG_TOPIC(log_metadata, "pw.metadata");
|
||||
PW_LOG_TOPIC(log_node, "pw.node");
|
||||
PW_LOG_TOPIC(log_port, "pw.port");
|
||||
|
|
@ -63,6 +64,7 @@ PW_LOG_TOPIC(log_factory, "pw.factory");
|
|||
PW_LOG_TOPIC(log_module, "pw.module");
|
||||
PW_LOG_TOPIC(log_device, "pw.device");
|
||||
PW_LOG_TOPIC(log_resource, "pw.resource");
|
||||
PW_LOG_TOPIC(log_thread_loop, "pw.thread-loop");
|
||||
|
||||
PW_LOG_TOPIC(PW_LOG_TOPIC_DEFAULT, "default");
|
||||
|
||||
|
|
@ -420,6 +422,7 @@ pw_log_init(void)
|
|||
PW_LOG_TOPIC_INIT(PW_LOG_TOPIC_DEFAULT);
|
||||
PW_LOG_TOPIC_INIT(log_buffers);
|
||||
PW_LOG_TOPIC_INIT(log_conf);
|
||||
PW_LOG_TOPIC_INIT(log_data_loop);
|
||||
PW_LOG_TOPIC_INIT(log_topic);
|
||||
PW_LOG_TOPIC_INIT(log_context);
|
||||
PW_LOG_TOPIC_INIT(log_metadata);
|
||||
|
|
@ -434,4 +437,5 @@ pw_log_init(void)
|
|||
PW_LOG_TOPIC_INIT(log_module);
|
||||
PW_LOG_TOPIC_INIT(log_device);
|
||||
PW_LOG_TOPIC_INIT(log_resource);
|
||||
PW_LOG_TOPIC_INIT(log_thread_loop);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,7 +31,9 @@
|
|||
#include "log.h"
|
||||
#include "thread-loop.h"
|
||||
|
||||
#define NAME "thread-loop"
|
||||
PW_LOG_TOPIC_EXTERN(log_thread_loop);
|
||||
#define PW_LOG_TOPIC_DEFAULT log_thread_loop
|
||||
|
||||
|
||||
#define pw_thread_loop_events_emit(o,m,v,...) spa_hook_list_call(&o->listener_list, struct pw_thread_loop_events, m, v, ##__VA_ARGS__)
|
||||
#define pw_thread_loop_events_destroy(o) pw_thread_loop_events_emit(o, destroy, 0)
|
||||
|
|
@ -118,7 +120,7 @@ static struct pw_thread_loop *loop_new(struct pw_loop *loop,
|
|||
if (this == NULL)
|
||||
return NULL;
|
||||
|
||||
pw_log_debug(NAME" %p: new name:%s", this, name);
|
||||
pw_log_debug("%p: new name:%s", this, name);
|
||||
|
||||
if (loop == NULL) {
|
||||
loop = pw_loop_new(props);
|
||||
|
|
@ -253,18 +255,18 @@ static void *do_loop(void *user_data)
|
|||
int res;
|
||||
|
||||
pthread_mutex_lock(&this->lock);
|
||||
pw_log_debug(NAME" %p: enter thread", this);
|
||||
pw_log_debug("%p: enter thread", this);
|
||||
pw_loop_enter(this->loop);
|
||||
|
||||
while (this->running) {
|
||||
if ((res = pw_loop_iterate(this->loop, -1)) < 0) {
|
||||
if (res == -EINTR)
|
||||
continue;
|
||||
pw_log_warn(NAME" %p: iterate error %d (%s)",
|
||||
pw_log_warn("%p: iterate error %d (%s)",
|
||||
this, res, spa_strerror(res));
|
||||
}
|
||||
}
|
||||
pw_log_debug(NAME" %p: leave thread", this);
|
||||
pw_log_debug("%p: leave thread", this);
|
||||
pw_loop_leave(this->loop);
|
||||
pthread_mutex_unlock(&this->lock);
|
||||
|
||||
|
|
@ -285,13 +287,13 @@ int pw_thread_loop_start(struct pw_thread_loop *loop)
|
|||
|
||||
loop->running = true;
|
||||
if ((err = pthread_create(&loop->thread, NULL, do_loop, loop)) != 0) {
|
||||
pw_log_warn(NAME" %p: can't create thread: %s", loop,
|
||||
pw_log_warn("%p: can't create thread: %s", loop,
|
||||
strerror(err));
|
||||
loop->running = false;
|
||||
return -err;
|
||||
}
|
||||
if ((err = pthread_setname_np(loop->thread, loop->name)) != 0)
|
||||
pw_log_warn(NAME" %p: error: %s", loop, strerror(err));
|
||||
pw_log_warn("%p: error: %s", loop, strerror(err));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -304,16 +306,16 @@ int pw_thread_loop_start(struct pw_thread_loop *loop)
|
|||
SPA_EXPORT
|
||||
void pw_thread_loop_stop(struct pw_thread_loop *loop)
|
||||
{
|
||||
pw_log_debug(NAME": %p stopping %d", loop, loop->running);
|
||||
pw_log_debug("%p stopping %d", loop, loop->running);
|
||||
if (loop->running) {
|
||||
pw_log_debug(NAME": %p signal", loop);
|
||||
pw_log_debug("%p signal", loop);
|
||||
pw_loop_signal_event(loop->loop, loop->event);
|
||||
pw_log_debug(NAME": %p join", loop);
|
||||
pw_log_debug("%p join", loop);
|
||||
pthread_join(loop->thread, NULL);
|
||||
pw_log_debug(NAME": %p joined", loop);
|
||||
pw_log_debug("%p joined", loop);
|
||||
loop->running = false;
|
||||
}
|
||||
pw_log_debug(NAME": %p stopped", loop);
|
||||
pw_log_debug("%p stopped", loop);
|
||||
}
|
||||
|
||||
/** Lock the mutex associated with \a loop
|
||||
|
|
@ -325,7 +327,7 @@ SPA_EXPORT
|
|||
void pw_thread_loop_lock(struct pw_thread_loop *loop)
|
||||
{
|
||||
pthread_mutex_lock(&loop->lock);
|
||||
pw_log_trace(NAME": %p", loop);
|
||||
pw_log_trace("%p", loop);
|
||||
}
|
||||
|
||||
/** Unlock the mutex associated with \a loop
|
||||
|
|
@ -336,7 +338,7 @@ void pw_thread_loop_lock(struct pw_thread_loop *loop)
|
|||
SPA_EXPORT
|
||||
void pw_thread_loop_unlock(struct pw_thread_loop *loop)
|
||||
{
|
||||
pw_log_trace(NAME": %p", loop);
|
||||
pw_log_trace("%p", loop);
|
||||
pthread_mutex_unlock(&loop->lock);
|
||||
}
|
||||
|
||||
|
|
@ -352,7 +354,7 @@ void pw_thread_loop_unlock(struct pw_thread_loop *loop)
|
|||
SPA_EXPORT
|
||||
void pw_thread_loop_signal(struct pw_thread_loop *loop, bool wait_for_accept)
|
||||
{
|
||||
pw_log_trace(NAME": %p, waiting:%d accept:%d",
|
||||
pw_log_trace("%p, waiting:%d accept:%d",
|
||||
loop, loop->n_waiting, wait_for_accept);
|
||||
if (loop->n_waiting > 0)
|
||||
pthread_cond_broadcast(&loop->cond);
|
||||
|
|
@ -373,11 +375,11 @@ void pw_thread_loop_signal(struct pw_thread_loop *loop, bool wait_for_accept)
|
|||
SPA_EXPORT
|
||||
void pw_thread_loop_wait(struct pw_thread_loop *loop)
|
||||
{
|
||||
pw_log_trace(NAME": %p, waiting %d", loop, loop->n_waiting);
|
||||
pw_log_trace("%p, waiting %d", loop, loop->n_waiting);
|
||||
loop->n_waiting++;
|
||||
pthread_cond_wait(&loop->cond, &loop->lock);
|
||||
loop->n_waiting--;
|
||||
pw_log_trace(NAME": %p, waiting done %d", loop, loop->n_waiting);
|
||||
pw_log_trace("%p, waiting done %d", loop, loop->n_waiting);
|
||||
}
|
||||
|
||||
/** Wait for the loop thread to call \ref pw_thread_loop_signal()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue