From 5227899647fb6d1f5fe2951e5db1a2bc86933a9f Mon Sep 17 00:00:00 2001 Message-Id: <5227899647fb6d1f5fe2951e5db1a2bc86933a9f.1715999958.git.mdw@distorted.org.uk> From: Mark Wooding Date: Tue, 5 May 2020 20:06:05 +0100 Subject: [PATCH] server/schedule.c: Maintain separate variables for raw and resolved tracks. Organization: Straylight/Edgeware From: Mark Wooding GCC 9 correctly points out that, if `trackdb_resolve' fails, we try to print a null pointer in the error message, rather than the offending track name. Fix this by not reusing the same variable for two different jobs with overlapping lifetimes. --- server/schedule.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/server/schedule.c b/server/schedule.c index 219fc14..520ae2e 100644 --- a/server/schedule.c +++ b/server/schedule.c @@ -359,6 +359,7 @@ static void schedule_play(ev_source *ev, const char *who, struct kvp *actiondata) { const char *track = kvp_get(actiondata, "track"); + const char *rtrack = 0; struct queue_entry *q; /* This stuff has rather a lot in common with c_play() */ @@ -370,12 +371,12 @@ static void schedule_play(ev_source *ev, disorder_error(0, "scheduled event %s: no such track as %s", id, track); return; } - if(!(track = trackdb_resolve(track))) { + if(!(rtrack = trackdb_resolve(track))) { disorder_error(0, "scheduled event %s: cannot resolve track %s", id, track); return; } - disorder_info("scheduled event %s: %s play %s", id, who, track); - q = queue_add(track, who, WHERE_START, NULL, origin_scheduled); + disorder_info("scheduled event %s: %s play %s", id, who, rtrack); + q = queue_add(rtrack, who, WHERE_START, NULL, origin_scheduled); queue_write(); if(q == qhead.next && playing) prepare(ev, q); -- [mdw]