Fix race condition in QR reader - slightly broken (doesn't run more than once)

This commit is contained in:
2018-05-10 22:08:00 -04:00
parent 5bb98a7fe2
commit 8189264908
2 changed files with 4 additions and 1 deletions

View File

@@ -34,6 +34,7 @@ typedef struct {
u32 *texture_buffer; u32 *texture_buffer;
Handle mutex; Handle mutex;
volatile bool finished; volatile bool finished;
volatile bool finished_update;
volatile bool success; volatile bool success;
Handle cancel; Handle cancel;

View File

@@ -276,6 +276,7 @@ void update_qr(qr_data *data)
free(filename); free(filename);
free(zip_buf); free(zip_buf);
data->finished_update = true;
} }
} }
@@ -286,13 +287,14 @@ bool init_qr(void)
qr_data *data = calloc(1, sizeof(qr_data)); qr_data *data = calloc(1, sizeof(qr_data));
data->capturing = false; data->capturing = false;
data->finished = false; data->finished = false;
data->finished_update = false;
data->context = quirc_new(); data->context = quirc_new();
quirc_resize(data->context, 400, 240); quirc_resize(data->context, 400, 240);
data->camera_buffer = calloc(1, 400 * 240 * sizeof(u16)); data->camera_buffer = calloc(1, 400 * 240 * sizeof(u16));
data->texture_buffer = calloc(1, 400 * 240 * sizeof(u32)); data->texture_buffer = calloc(1, 400 * 240 * sizeof(u32));
while (!data->finished) update_qr(data); while (!data->finished_update && !data->finished) update_qr(data);
return (bool)data->success; return (bool)data->success;
} }