Fix bug caused by race between theme thread & QR reader UI thread
This commit is contained in:
@@ -35,6 +35,7 @@ typedef struct {
|
|||||||
C3D_Tex *tex;
|
C3D_Tex *tex;
|
||||||
Handle mutex;
|
Handle mutex;
|
||||||
volatile bool finished;
|
volatile bool finished;
|
||||||
|
volatile bool closed;
|
||||||
volatile bool success;
|
volatile bool success;
|
||||||
Handle cancel;
|
Handle cancel;
|
||||||
Handle started;
|
Handle started;
|
||||||
@@ -47,4 +48,4 @@ bool init_qr(void);
|
|||||||
void exit_qr(qr_data *data);
|
void exit_qr(qr_data *data);
|
||||||
void take_picture(void);
|
void take_picture(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -150,7 +150,8 @@ void update_ui(void *arg)
|
|||||||
if (data->finished)
|
if (data->finished)
|
||||||
{
|
{
|
||||||
end_frame();
|
end_frame();
|
||||||
}
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
C2D_DrawImageAt(data->image, 0.0f, 0.0f, 0.4f, NULL, 1.0f, 1.0f);
|
C2D_DrawImageAt(data->image, 0.0f, 0.0f, 0.4f, NULL, 1.0f, 1.0f);
|
||||||
|
|
||||||
@@ -158,6 +159,7 @@ void update_ui(void *arg)
|
|||||||
draw_text_center(GFX_BOTTOM, 4, 0.5, 0.5, 0.5, colors[COLOR_WHITE], "Press \uE005 To Quit");
|
draw_text_center(GFX_BOTTOM, 4, 0.5, 0.5, 0.5, colors[COLOR_WHITE], "Press \uE005 To Quit");
|
||||||
end_frame();
|
end_frame();
|
||||||
}
|
}
|
||||||
|
data->closed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool start_capture_cam(qr_data *data)
|
bool start_capture_cam(qr_data *data)
|
||||||
@@ -306,6 +308,7 @@ 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->closed = false;
|
||||||
svcCreateEvent(&data->started, RESET_STICKY);
|
svcCreateEvent(&data->started, RESET_STICKY);
|
||||||
|
|
||||||
data->context = quirc_new();
|
data->context = quirc_new();
|
||||||
@@ -321,7 +324,8 @@ bool init_qr(void)
|
|||||||
|
|
||||||
while (!data->finished) update_qr(data);
|
while (!data->finished) update_qr(data);
|
||||||
bool success = data->success;
|
bool success = data->success;
|
||||||
|
while (!data->closed) svcSleepThread(1000000);
|
||||||
free(data);
|
free(data);
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user