struct action_executor *executor = user_data;
bool update_communication = true;
- ASSERT_LOCKED(client->lock);
-
switch (status) {
case CLIENT_TRANSMISSION_STATUS_COMPLETE:
DBG("Successfully sent full notification to client, client_id = %" PRIu64,
case CLIENT_TRANSMISSION_STATUS_FAIL:
DBG("Communication error occurred while sending notification to client, client_id = %" PRIu64,
client->id);
- client->communication.active = false;
break;
default:
ERR("Fatal error encoutered while sending notification to client, client_id = %" PRIu64,
client->id);
- client->communication.active = false;
ret = -1;
goto end;
}
goto end;
}
+ /* Safe to read client's id without locking as it is immutable. */
ret = notification_thread_client_communication_update(
executor->notification_thread_handle, client->id,
status);
pthread_mutex_lock(&executor->work.lock);
}
- pthread_mutex_unlock(&executor->work.lock);
+ if (executor->should_quit) {
+ pthread_mutex_unlock(&executor->work.lock);
+ }
DBG("Left work execution loop");
health_code_update();