LXVST: fix crash at exit if Linux VSTs are disabled or X11 connection fails
This commit is contained in:
parent
c77d2d42b9
commit
79e2ffff2a
@ -58,7 +58,7 @@ static VSTState * vstfx_first = NULL;
|
|||||||
|
|
||||||
const char magic[] = "VSTFX Plugin State v002";
|
const char magic[] = "VSTFX Plugin State v002";
|
||||||
|
|
||||||
static volatile int gui_quit = 0;
|
static volatile int gui_state = -1;
|
||||||
|
|
||||||
/*This will be our connection to X*/
|
/*This will be our connection to X*/
|
||||||
|
|
||||||
@ -330,7 +330,7 @@ gui_event_loop (void* ptr)
|
|||||||
clock1 = g_get_monotonic_time();
|
clock1 = g_get_monotonic_time();
|
||||||
/*The 'Forever' loop - runs the plugin UIs etc - based on the FST gui event loop*/
|
/*The 'Forever' loop - runs the plugin UIs etc - based on the FST gui event loop*/
|
||||||
|
|
||||||
while (!gui_quit)
|
while (gui_state == 0)
|
||||||
{
|
{
|
||||||
/* handle window creation requests, destroy requests,
|
/* handle window creation requests, destroy requests,
|
||||||
and run idle callbacks */
|
and run idle callbacks */
|
||||||
@ -464,7 +464,7 @@ again:
|
|||||||
clock1 = g_get_monotonic_time();
|
clock1 = g_get_monotonic_time();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gui_quit && may_sleep && elapsed_time_ms + 1 < LXVST_sched_timer_interval) {
|
if (0 == gui_state && may_sleep && elapsed_time_ms + 1 < LXVST_sched_timer_interval) {
|
||||||
Glib::usleep (1000 * (LXVST_sched_timer_interval - elapsed_time_ms - 1));
|
Glib::usleep (1000 * (LXVST_sched_timer_interval - elapsed_time_ms - 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -506,7 +506,7 @@ normally started in globals.cc*/
|
|||||||
|
|
||||||
int vstfx_init (void* ptr)
|
int vstfx_init (void* ptr)
|
||||||
{
|
{
|
||||||
assert (gui_quit == 0);
|
assert (gui_state == -1);
|
||||||
pthread_mutex_init (&plugin_mutex, NULL);
|
pthread_mutex_init (&plugin_mutex, NULL);
|
||||||
|
|
||||||
int thread_create_result;
|
int thread_create_result;
|
||||||
@ -542,6 +542,7 @@ int vstfx_init (void* ptr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*We have a connection to X - so start the gui event loop*/
|
/*We have a connection to X - so start the gui event loop*/
|
||||||
|
gui_state = 0;
|
||||||
|
|
||||||
/*Create the thread - use default attrs for now, don't think we need anything special*/
|
/*Create the thread - use default attrs for now, don't think we need anything special*/
|
||||||
|
|
||||||
@ -555,7 +556,7 @@ int vstfx_init (void* ptr)
|
|||||||
|
|
||||||
XCloseDisplay (LXVST_XDisplay);
|
XCloseDisplay (LXVST_XDisplay);
|
||||||
LXVST_XDisplay = 0;
|
LXVST_XDisplay = 0;
|
||||||
gui_quit = 1;
|
gui_state = 1;
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -567,10 +568,10 @@ int vstfx_init (void* ptr)
|
|||||||
|
|
||||||
void vstfx_exit ()
|
void vstfx_exit ()
|
||||||
{
|
{
|
||||||
if (gui_quit) {
|
if (gui_state) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
gui_quit = 1;
|
gui_state = 1;
|
||||||
|
|
||||||
/*We need to pthread_join the gui_thread here so
|
/*We need to pthread_join the gui_thread here so
|
||||||
we know when it has stopped*/
|
we know when it has stopped*/
|
||||||
|
Loading…
Reference in New Issue
Block a user