XQuartz: pbproxy: Wait for the server to finish starting up, so display is valid.
Signed-off-by: Jeremy Huddleston <jeremyhu@freedesktop.org>
This commit is contained in:
parent
15fc56addc
commit
e87a03fd53
|
@ -37,7 +37,11 @@
|
||||||
static const char *app_prefs_domain = "org.x.X11";
|
static const char *app_prefs_domain = "org.x.X11";
|
||||||
CFStringRef app_prefs_domain_cfstr;
|
CFStringRef app_prefs_domain_cfstr;
|
||||||
|
|
||||||
|
/* Stubs */
|
||||||
char *display = NULL;
|
char *display = NULL;
|
||||||
|
BOOL serverInitComplete = YES;
|
||||||
|
pthread_mutex_t serverInitCompleteMutex = PTHREAD_MUTEX_INITIALIZER;
|
||||||
|
pthread_cond_t serverInitCompleteCond = PTHREAD_COND_INITIALIZER;
|
||||||
|
|
||||||
static void signal_handler (int sig) {
|
static void signal_handler (int sig) {
|
||||||
switch(sig) {
|
switch(sig) {
|
||||||
|
|
|
@ -47,6 +47,20 @@ BOOL xpbproxy_is_standalone = NO;
|
||||||
|
|
||||||
x_selection *_selection_object;
|
x_selection *_selection_object;
|
||||||
|
|
||||||
|
extern BOOL serverInitComplete;
|
||||||
|
extern pthread_mutex_t serverInitCompleteMutex;
|
||||||
|
extern pthread_cond_t serverInitCompleteCond;
|
||||||
|
|
||||||
|
static inline void wait_for_server_init(void) {
|
||||||
|
/* If the server hasn't finished initializing, wait for it... */
|
||||||
|
if(!serverInitComplete) {
|
||||||
|
pthread_mutex_lock(&serverInitCompleteMutex);
|
||||||
|
while(!serverInitComplete)
|
||||||
|
pthread_cond_wait(&serverInitCompleteCond, &serverInitCompleteMutex);
|
||||||
|
pthread_mutex_unlock(&serverInitCompleteMutex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int x_io_error_handler (Display *dpy) {
|
static int x_io_error_handler (Display *dpy) {
|
||||||
/* We lost our connection to the server. */
|
/* We lost our connection to the server. */
|
||||||
|
|
||||||
|
@ -85,6 +99,8 @@ static void *xpbproxy_x_thread(void *args) {
|
||||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
|
wait_for_server_init();
|
||||||
|
|
||||||
for(i=0, xpbproxy_dpy=NULL; !xpbproxy_dpy && i<5; i++) {
|
for(i=0, xpbproxy_dpy=NULL; !xpbproxy_dpy && i<5; i++) {
|
||||||
xpbproxy_dpy = XOpenDisplay(NULL);
|
xpbproxy_dpy = XOpenDisplay(NULL);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue