ipc: Retry receiving credentials if the the message is short
see rhbz#2111711
This commit is contained in:
		
							parent
							
								
									a04b7d52f2
								
							
						
					
					
						commit
						a21fe209c0
					
				
							
								
								
									
										46
									
								
								connretry-recv.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								connretry-recv.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,46 @@ | ||||
| commit 5594d377ac73d37c06bbad1798e87a65f9a12e07 | ||||
| Author: Chrissie Caulfield <ccaulfie@redhat.com> | ||||
| Date:   Fri Nov 25 07:38:20 2022 +0000 | ||||
| 
 | ||||
|     ipc: Retry receiving credentials if the the message is short (#476) | ||||
|      | ||||
|     ipc: Retry receiving credentials if the the message is short | ||||
|      | ||||
|     rhbz#2111711 refers | ||||
| 
 | ||||
| diff --git a/lib/ipc_setup.c b/lib/ipc_setup.c
 | ||||
| index 0ef9bb6..0de7115 100644
 | ||||
| --- a/lib/ipc_setup.c
 | ||||
| +++ b/lib/ipc_setup.c
 | ||||
| @@ -473,11 +473,15 @@ qb_ipcc_us_setup_connect(struct qb_ipcc_connection *c,
 | ||||
|  	return 0; | ||||
|  } | ||||
|   | ||||
| +#define AUTH_RECV_MAX_RETRIES 10
 | ||||
| +#define AUTH_RECV_SLEEP_TIME_US 100
 | ||||
| +
 | ||||
|  /* Called from ipcc_connect_continue() when async connect socket is active */ | ||||
|  int qb_ipcc_setup_connect_continue(struct qb_ipcc_connection *c, struct qb_ipc_connection_response *r) | ||||
|  { | ||||
|  	struct ipc_auth_data *data; | ||||
|  	int32_t res; | ||||
| +	int retry_count = 0;
 | ||||
|  #ifdef QB_LINUX | ||||
|  	int off = 0; | ||||
|  #endif | ||||
| @@ -486,8 +490,14 @@ int qb_ipcc_setup_connect_continue(struct qb_ipcc_connection *c, struct qb_ipc_c
 | ||||
|  		qb_ipcc_us_sock_close(c->setup.u.us.sock); | ||||
|  		return -ENOMEM; | ||||
|  	} | ||||
| -
 | ||||
| +retry:
 | ||||
|  	res = qb_ipc_us_recv_msghdr(data); | ||||
| +	if (res == -EAGAIN && ++retry_count < AUTH_RECV_MAX_RETRIES) {
 | ||||
| +		struct timespec ts = {0,  AUTH_RECV_SLEEP_TIME_US*QB_TIME_NS_IN_USEC};
 | ||||
| +		struct timespec ts_left = {0, 0};
 | ||||
| +		nanosleep(&ts, &ts_left);
 | ||||
| +		goto retry;
 | ||||
| +	}
 | ||||
|   | ||||
|  #ifdef QB_LINUX | ||||
|  	setsockopt(c->setup.u.us.sock, SOL_SOCKET, SO_PASSCRED, &off, | ||||
| @ -2,14 +2,14 @@ | ||||
| 
 | ||||
| Name:           libqb | ||||
| Version:        2.0.6 | ||||
| Release:        3%{?dist} | ||||
| Release:        4%{?dist} | ||||
| Summary:        Library providing high performance logging, tracing, ipc, and poll | ||||
| 
 | ||||
| License:        LGPLv2+ | ||||
| URL:            https://github.com/ClusterLabs/libqb | ||||
| Source0:        https://github.com/ClusterLabs/libqb/releases/download/v%{version}/%{name}-%{version}.tar.xz | ||||
| 
 | ||||
| #Patch0: sock-test-rootonly.patch | ||||
| Patch0: connretry-recv.patch | ||||
| 
 | ||||
| BuildRequires:  autoconf automake libtool | ||||
| BuildRequires:  check-devel | ||||
| @ -31,7 +31,7 @@ and polling. | ||||
| 
 | ||||
| %prep | ||||
| %setup -q -n %{name}-%{version} | ||||
| #%patch0 -p1 -b .sock-test-rootonly | ||||
| %patch0 -p1 -b .connretry-recv.patch | ||||
| 
 | ||||
| %build | ||||
| ./autogen.sh | ||||
| @ -87,6 +87,9 @@ This package contains a program to create nicely-formatted man pages from Doxyge | ||||
| 
 | ||||
| 
 | ||||
| %changelog | ||||
| * Fri Dec 02 2022 Christine Caulfield <ccaulfie@redhat.com> 2.0.6-4 | ||||
|   ipc: Retry receiving credentials if the the message is short | ||||
| 
 | ||||
| * Wed Aug 03 2022 Christine Caulfield <ccaulfie@redhat.com> 2.0.6-3 | ||||
|   Don't run tests on Fedora. We have a local CI and it just loads | ||||
|   up the Fedora build system (and occasionally fails for loading reasons) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user