* gnu/packages/patches/slim-sigusr1.patch: New file. * gnu/packages/slim.scm (slim): Use it. * gnu-system.am (dist_patch_DATA): Add it.
		
			
				
	
	
		
			33 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| This patch fixes SLiM so it really waits for the X server to be ready
 | |
| before attempting to connect to it.  Indeed, the X server notices that
 | |
| its parent process has a handler for SIGUSR1, and consequently sends it
 | |
| SIGUSR1 when it's ready to accept connections.
 | |
| 
 | |
| The problem was that SLiM doesn't pay attention to SIGUSR1.  So in practice,
 | |
| if X starts slowly, then SLiM gets ECONNREFUSED a couple of time on
 | |
| /tmp/.X11-unix/X0, then goes on trying to connect to localhost:6000,
 | |
| where nobody answers; eventually, it times out and tries again on
 | |
| /tmp/.X11-unix/X0, and finally it shows up on the screen.
 | |
| 
 | |
| Patch by L. Courtès.
 | |
| 
 | |
| --- slim-1.3.6/app.cpp	2014-02-05 15:27:20.000000000 +0100
 | |
| +++ slim-1.3.6/app.cpp	2014-02-09 22:42:04.000000000 +0100
 | |
| @@ -119,7 +119,9 @@ void CatchSignal(int sig) {
 | |
|  	exit(ERR_EXIT);
 | |
|  }
 | |
|  
 | |
| +static volatile int got_sigusr1 = 0;
 | |
|  void User1Signal(int sig) {
 | |
| +	got_sigusr1 = 1;
 | |
|  	signal(sig, User1Signal);
 | |
|  }
 | |
|  
 | |
| @@ -884,6 +886,7 @@ int App::WaitForServer() {
 | |
|  	int	ncycles	 = 120;
 | |
|  	int	cycles;
 | |
|  
 | |
| +	while (!got_sigusr1);
 | |
|  	for(cycles = 0; cycles < ncycles; cycles++) {
 | |
|  		if((Dpy = XOpenDisplay(DisplayName))) {
 | |
|  			XSetIOErrorHandler(xioerror);
 |