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 | Name:           libqb | ||||||
| Version:        2.0.6 | Version:        2.0.6 | ||||||
| Release:        3%{?dist} | Release:        4%{?dist} | ||||||
| Summary:        Library providing high performance logging, tracing, ipc, and poll | Summary:        Library providing high performance logging, tracing, ipc, and poll | ||||||
| 
 | 
 | ||||||
| License:        LGPLv2+ | License:        LGPLv2+ | ||||||
| URL:            https://github.com/ClusterLabs/libqb | URL:            https://github.com/ClusterLabs/libqb | ||||||
| Source0:        https://github.com/ClusterLabs/libqb/releases/download/v%{version}/%{name}-%{version}.tar.xz | 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:  autoconf automake libtool | ||||||
| BuildRequires:  check-devel | BuildRequires:  check-devel | ||||||
| @ -31,7 +31,7 @@ and polling. | |||||||
| 
 | 
 | ||||||
| %prep | %prep | ||||||
| %setup -q -n %{name}-%{version} | %setup -q -n %{name}-%{version} | ||||||
| #%patch0 -p1 -b .sock-test-rootonly | %patch0 -p1 -b .connretry-recv.patch | ||||||
| 
 | 
 | ||||||
| %build | %build | ||||||
| ./autogen.sh | ./autogen.sh | ||||||
| @ -87,6 +87,9 @@ This package contains a program to create nicely-formatted man pages from Doxyge | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| %changelog | %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 | * 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 |   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) |   up the Fedora build system (and occasionally fails for loading reasons) | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user