Browse Source

Make close_stream(fifo.c) return a status code (don't assert on failure) [clang scan-build]

master
Reece H. Dunn 9 years ago
parent
commit
39cd145ba3
1 changed files with 18 additions and 8 deletions
  1. 18
    8
      src/libespeak-ng/fifo.c

+ 18
- 8
src/libespeak-ng/fifo.c View File

@@ -220,35 +220,45 @@ static int sleep_until_start_request_or_inactivity()
return a_start_is_required;
}

static void close_stream()
static espeak_ng_STATUS close_stream()
{
// Warning: a wave_close can be already required by
// an external command (espeak_Cancel + fifo_stop), if so:
// my_stop_is_required = 1;

int a_status = pthread_mutex_lock(&my_mutex);
assert(!a_status);
espeak_ng_STATUS status = pthread_mutex_lock(&my_mutex);
if (status != ENS_OK)
return status;

int a_stop_is_required = my_stop_is_required;
if (!a_stop_is_required)
my_command_is_running = 1;
a_status = pthread_mutex_unlock(&my_mutex);

status = pthread_mutex_unlock(&my_mutex);

if (!a_stop_is_required) {
wave_close(NULL);

int a_status = pthread_mutex_lock(&my_mutex);
assert(!a_status);
my_command_is_running = 0;
if (status == ENS_OK)
status = a_status;

my_command_is_running = 0;
a_stop_is_required = my_stop_is_required;

a_status = pthread_mutex_unlock(&my_mutex);
if (status == ENS_OK)
status = a_status;

if (a_stop_is_required) {
// acknowledge the stop request
int a_status = sem_post(&my_sem_stop_is_acknowledged);
assert(a_status != -1);
a_status = sem_post(&my_sem_stop_is_acknowledged);
if (status == ENS_OK)
status = a_status;
}
}

return status;
}

static void *say_thread(void *p)

Loading…
Cancel
Save