From: Mike Brady Date: Sun, 29 Jul 2018 09:45:55 +0000 (+0100) Subject: Prevent arithmetic overflow after 2^32 microseconds, i.e. about one hoour and 11... X-Git-Tag: 3.3RC0~286^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c91a991edda4a6ea17c5333b6312c637e72b558c;p=thirdparty%2Fshairport-sync.git Prevent arithmetic overflow after 2^32 microseconds, i.e. about one hoour and 11 minutes... --- diff --git a/audio_alsa.c b/audio_alsa.c index b122a63f..01884362 100644 --- a/audio_alsa.c +++ b/audio_alsa.c @@ -910,8 +910,7 @@ static void play(void *buf, int samples) { } frame_index = 0; // we'll be starting over measurement_data_is_valid = 0; - } - if ((snd_pcm_state(alsa_handle) == SND_PCM_STATE_PREPARED) || + } else if ((snd_pcm_state(alsa_handle) == SND_PCM_STATE_PREPARED) || (snd_pcm_state(alsa_handle) == SND_PCM_STATE_RUNNING)) { if (buf == NULL) debug(1, "NULL buffer passed to pcm_writei -- skipping it"); diff --git a/player.c b/player.c index 1a457334..3356cb67 100644 --- a/player.c +++ b/player.c @@ -2301,10 +2301,7 @@ void *player_thread_func(void *arg) { uint64_t elapsed_play_time, frames_played; conn->frame_rate_status = config.output->rate_info(&elapsed_play_time,&frames_played); if (conn->frame_rate_status==0) { - uint64_t elapsed_play_time_microseconds_fp, elapsed_play_time_microseconds; - elapsed_play_time_microseconds_fp = elapsed_play_time * 1000000; - elapsed_play_time_microseconds = elapsed_play_time_microseconds_fp >> 32; - conn->frame_rate = frames_played*1000000.0/elapsed_play_time_microseconds; + conn->frame_rate = 1.0*(frames_played*(uint64_t)0x100000000)/elapsed_play_time; } } inform(