}
}
}
- // debug_mutex_unlock(&alsa_mutex, 3);
- pthread_cleanup_pop(1);
+ debug_mutex_unlock(&alsa_mutex, 3);
+ pthread_cleanup_pop(0);
// here, occasionally pretend there's a problem with pcm_get_delay()
// if ((random() % 100000) < 3) // keep it pretty rare
// reply = -EIO; // pretend something bad has happened
do_mute(0);
}
- // debug_mutex_unlock(&alsa_mutex, 3);
- pthread_cleanup_pop(1); // release the mutex
+ debug_mutex_unlock(&alsa_mutex, 3);
+ pthread_cleanup_pop(0); // release the mutex
}
if (ret == 0) {
pthread_cleanup_debug_mutex_lock(&alsa_mutex, 10000, 1);
frame_index = 0;
measurement_data_is_valid = 0;
}
- // debug_mutex_unlock(&alsa_mutex, 3);
- pthread_cleanup_pop(1); // release the mutex
+ debug_mutex_unlock(&alsa_mutex, 3);
+ pthread_cleanup_pop(0); // release the mutex
}
return ret;
}
measurement_data_is_valid = 0;
alsa_handle = NULL;
}
- // debug_mutex_unlock(&alsa_mutex, 3);
- pthread_cleanup_pop(1); // release the mutex
+ debug_mutex_unlock(&alsa_mutex, 3);
+ pthread_cleanup_pop(0); // release the mutex
}
static void stop(void) {
pthread_cleanup_debug_mutex_lock(&alsa_mutex, 1000, 1);
volume_set_request = 1; // an external request has been made to set the volume
do_volume(vol);
- // debug_mutex_unlock(&alsa_mutex, 3);
- pthread_cleanup_pop(1); // release the mutex
+ debug_mutex_unlock(&alsa_mutex, 3);
+ pthread_cleanup_pop(0); // release the mutex
}
/*
mute_request_pending = 1;
overriding_mute_state_requested = mute_state_requested;
do_mute(mute_state_requested);
- // debug_mutex_unlock(&alsa_mutex, 3);
- pthread_cleanup_pop(1); // release the mutex
+ debug_mutex_unlock(&alsa_mutex, 0);
+ pthread_cleanup_pop(0); // release the mutex
}
void do_mute(int mute_state_requested) {
void set_requested_connection_state_to_output(int v) { requested_connection_state_to_output = v; }
void die(const char *format, ...) {
+ int oldState;
+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldState);
char s[1024];
s[0] = 0;
uint64_t time_now = get_absolute_time_in_fp();
daemon_log(LOG_EMERG, "% 20.9f|*fatal error: %s", tss, s);
else
daemon_log(LOG_EMERG, "fatal error: %s", s);
+ pthread_setcancelstate(oldState,NULL);
exit(1);
}
void warn(const char *format, ...) {
+ int oldState;
+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldState);
char s[1024];
s[0] = 0;
uint64_t time_now = get_absolute_time_in_fp();
daemon_log(LOG_WARNING, "% 20.9f|*warning: %s", tss, s);
else
daemon_log(LOG_WARNING, "%s", s);
+ pthread_setcancelstate(oldState,NULL);
}
void debug(int level, const char *format, ...) {
if (level > debuglev)
return;
+ int oldState;
+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldState);
char s[1024];
s[0] = 0;
uint64_t time_now = get_absolute_time_in_fp();
daemon_log(LOG_DEBUG, "% 20.9f|%s", tss, s);
else
daemon_log(LOG_DEBUG, "%s", s);
+ pthread_setcancelstate(oldState,NULL);
}
void inform(const char *format, ...) {
+ int oldState;
+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldState);
char s[1024];
s[0] = 0;
uint64_t time_now = get_absolute_time_in_fp();
daemon_log(LOG_INFO, "% 20.9f|%s", tss, s);
else
daemon_log(LOG_INFO, "%s", s);
+ pthread_setcancelstate(oldState,NULL);
}
// The following two functions are adapted slightly and with thanks from Jonathan Leffler's sample
int sps_pthread_mutex_timedlock(pthread_mutex_t *mutex, useconds_t dally_time,
const char *debugmessage, int debuglevel) {
+ int oldState;
+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldState);
struct timespec tn;
clock_gettime(CLOCK_REALTIME, &tn);
uint64_t tnfpsec = tn.tv_sec;
debug(debuglevel, "error %d: \"%s\" waiting for a mutex: \"%s\".", r,
strerror_r(r, errstr, sizeof(errstr)), debugmessage);
}
+ pthread_setcancelstate(oldState,NULL);
return r;
}
#endif
const char *debugmessage, int debuglevel) {
// this is not pthread_cancellation safe because is contains a cancellation point
+ int oldState;
+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldState);
useconds_t time_to_wait = dally_time;
int r = pthread_mutex_trylock(mutex);
while ((r == EBUSY) && (time_to_wait > 0)) {
strerror_r(r, errstr, sizeof(errstr)), debugmessage);
}
}
+ pthread_setcancelstate(oldState,NULL);
return r;
}
#endif
const int line, int debuglevel) {
if (debuglevel > debuglev)
return pthread_mutex_lock(mutex);
+ int oldState;
+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldState);
uint64_t time_at_start = get_absolute_time_in_fp();
char dstring[1000];
memset(dstring, 0, sizeof(dstring));
"debug_mutex_lock at \"%s\" expected max wait: %0.9f, actual wait: %0.9f sec.", dstring,
(1.0 * dally_time) / 1000000, delay);
}
+ pthread_setcancelstate(oldState,NULL);
return result;
}
int debuglevel) {
if (debuglevel > debuglev)
return pthread_mutex_unlock(mutex);
+ int oldState;
+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldState);
char dstring[1000];
char errstr[512];
memset(dstring, 0, sizeof(dstring));
if (r != 0)
debug(1, "error %d: \"%s\" unlocking a mutex: \"%s\".", r,
strerror_r(r, errstr, sizeof(errstr)), dstring);
+ pthread_setcancelstate(oldState,NULL);
return r;
}