Update to version 1.3.10
This commit is contained in:
parent
3ae4be2e14
commit
3e7d05f9d0
@ -1,37 +0,0 @@
|
|||||||
From 6ce448ad559446c2a6fa98ba642adbbe314207a1 Mon Sep 17 00:00:00 2001
|
|
||||||
From: li-miaomiao_zhr <mmlidc@isoftstone.com>
|
|
||||||
Date: Thu, 4 May 2023 15:33:36 +0800
|
|
||||||
Subject: [PATCH] fix problem of scons build of print
|
|
||||||
|
|
||||||
---
|
|
||||||
build/check.py | 8 ++++----
|
|
||||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/build/check.py b/build/check.py
|
|
||||||
index 2dacb4c..9dea409 100755
|
|
||||||
--- a/build/check.py
|
|
||||||
+++ b/build/check.py
|
|
||||||
@@ -52,16 +52,16 @@ if __name__ == '__main__':
|
|
||||||
|
|
||||||
# Find test responses and run them one by one
|
|
||||||
for case in glob.glob(testdir + "/testcases/*.response"):
|
|
||||||
- print "== Testing %s ==" % (case)
|
|
||||||
+ print ("== Testing %s ==" % (case))
|
|
||||||
try:
|
|
||||||
subprocess.check_call([SERF_RESPONSE_EXE, case])
|
|
||||||
except subprocess.CalledProcessError:
|
|
||||||
- print "ERROR: test case %s failed" % (case)
|
|
||||||
+ print ("ERROR: test case %s failed" % (case))
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
- print "== Running the unit tests =="
|
|
||||||
+ print ("== Running the unit tests ==")
|
|
||||||
try:
|
|
||||||
subprocess.check_call(TEST_ALL_EXE)
|
|
||||||
except subprocess.CalledProcessError:
|
|
||||||
- print "ERROR: test(s) failed in test_all"
|
|
||||||
+ print ("ERROR: test(s) failed in test_all")
|
|
||||||
sys.exit(1)
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
133
backport-libserf-1.3.9-multihome.patch
Normal file
133
backport-libserf-1.3.9-multihome.patch
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
commit 9f03432308609644d633ed79aaa17bcf19b6060e
|
||||||
|
Author: Tomas Korbar <tkorbar@redhat.com>
|
||||||
|
Date: Fri Jan 27 14:01:11 2023 +0100
|
||||||
|
|
||||||
|
Fix connection to multihome servers
|
||||||
|
|
||||||
|
When libserfs connection is rejected, epoll socket receives EPOLLHUP
|
||||||
|
and its handling has to be suspended if the connection was never
|
||||||
|
set up, so we can check another address if the target server
|
||||||
|
is located on more ip addresses.
|
||||||
|
|
||||||
|
diff --git a/outgoing.c b/outgoing.c
|
||||||
|
index 5f5f6b5..313b6c9 100644
|
||||||
|
--- a/outgoing.c
|
||||||
|
+++ b/outgoing.c
|
||||||
|
@@ -153,6 +153,11 @@ apr_status_t serf__conn_update_pollset(serf_connection_t *conn)
|
||||||
|
|
||||||
|
/* Now put it back in with the correct read/write values. */
|
||||||
|
desc.reqevents = APR_POLLHUP | APR_POLLERR;
|
||||||
|
+
|
||||||
|
+ if (conn->wait_for_connect) {
|
||||||
|
+ desc.reqevents |= APR_POLLOUT;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (conn->requests &&
|
||||||
|
conn->state != SERF_CONN_INIT) {
|
||||||
|
/* If there are any outstanding events, then we want to read. */
|
||||||
|
@@ -391,6 +396,9 @@ apr_status_t serf__open_connections(serf_context_t *ctx)
|
||||||
|
if (status != APR_SUCCESS) {
|
||||||
|
if (!APR_STATUS_IS_EINPROGRESS(status))
|
||||||
|
return status;
|
||||||
|
+
|
||||||
|
+ /* Keep track of when we really connect */
|
||||||
|
+ conn->wait_for_connect = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Flag our pollset as dirty now that we have a new socket. */
|
||||||
|
@@ -1253,7 +1261,7 @@ apr_status_t serf__process_connection(serf_connection_t *conn,
|
||||||
|
* the like sitting on the connection, we give the app a chance to read
|
||||||
|
* it before we trigger a reset condition.
|
||||||
|
*/
|
||||||
|
- if ((events & APR_POLLIN) != 0) {
|
||||||
|
+ if ((events & APR_POLLIN) != 0 && !conn->wait_for_connect) {
|
||||||
|
if ((status = read_from_connection(conn)) != APR_SUCCESS)
|
||||||
|
return status;
|
||||||
|
|
||||||
|
@@ -1264,7 +1272,13 @@ apr_status_t serf__process_connection(serf_connection_t *conn,
|
||||||
|
return APR_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- if ((events & APR_POLLHUP) != 0) {
|
||||||
|
+ /*
|
||||||
|
+ * Since new connection which is refused also creates HUP event,
|
||||||
|
+ * we need to suppress its handling until we are sure that connection
|
||||||
|
+ * was established, so we can eventually handle denial of connection
|
||||||
|
+ * by trying different server
|
||||||
|
+ */
|
||||||
|
+ if ((events & APR_POLLHUP) != 0 && !conn->wait_for_connect) {
|
||||||
|
/* The connection got reset by the server. On Windows this can happen
|
||||||
|
when all data is read, so just cleanup the connection and open
|
||||||
|
a new one.
|
||||||
|
@@ -1292,11 +1306,16 @@ apr_status_t serf__process_connection(serf_connection_t *conn,
|
||||||
|
{
|
||||||
|
apr_os_sock_t osskt;
|
||||||
|
if (!apr_os_sock_get(&osskt, conn->skt)) {
|
||||||
|
- int error;
|
||||||
|
+ int error = 0;
|
||||||
|
+ int rv;
|
||||||
|
apr_socklen_t l = sizeof(error);
|
||||||
|
|
||||||
|
- if (!getsockopt(osskt, SOL_SOCKET, SO_ERROR, (char*)&error,
|
||||||
|
- &l)) {
|
||||||
|
+ rv = getsockopt(osskt, SOL_SOCKET, SO_ERROR, (char*)&error, &l);
|
||||||
|
+ /* The error is placed in errno on Solaris for SO_ERROR */
|
||||||
|
+ if(rv)
|
||||||
|
+ error = errno;
|
||||||
|
+
|
||||||
|
+ if (error) {
|
||||||
|
status = APR_FROM_OS_ERROR(error);
|
||||||
|
|
||||||
|
/* Handle fallback for multi-homed servers.
|
||||||
|
@@ -1310,7 +1329,8 @@ apr_status_t serf__process_connection(serf_connection_t *conn,
|
||||||
|
&& conn->address->next != NULL
|
||||||
|
&& (APR_STATUS_IS_ECONNREFUSED(status)
|
||||||
|
|| APR_STATUS_IS_TIMEUP(status)
|
||||||
|
- || APR_STATUS_IS_ENETUNREACH(status))) {
|
||||||
|
+ || APR_STATUS_IS_ENETUNREACH(status)
|
||||||
|
+ || APR_STATUS_IS_EHOSTUNREACH(status))) {
|
||||||
|
|
||||||
|
conn->address = conn->address->next;
|
||||||
|
return reset_connection(conn, 1);
|
||||||
|
@@ -1324,6 +1344,8 @@ apr_status_t serf__process_connection(serf_connection_t *conn,
|
||||||
|
return APR_EGENERAL;
|
||||||
|
}
|
||||||
|
if ((events & APR_POLLOUT) != 0) {
|
||||||
|
+ if (conn->wait_for_connect)
|
||||||
|
+ conn->wait_for_connect = false;
|
||||||
|
if ((status = write_to_connection(conn)) != APR_SUCCESS)
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
@@ -1358,6 +1380,7 @@ serf_connection_t *serf_connection_create(
|
||||||
|
conn->baton.u.conn = conn;
|
||||||
|
conn->hit_eof = 0;
|
||||||
|
conn->state = SERF_CONN_INIT;
|
||||||
|
+ conn->wait_for_connect = false;
|
||||||
|
conn->latency = -1; /* unknown */
|
||||||
|
|
||||||
|
/* Create a subpool for our connection. */
|
||||||
|
diff --git a/serf_private.h b/serf_private.h
|
||||||
|
index f906379..b2da7df 100644
|
||||||
|
--- a/serf_private.h
|
||||||
|
+++ b/serf_private.h
|
||||||
|
@@ -21,6 +21,8 @@
|
||||||
|
#ifndef _SERF_PRIVATE_H_
|
||||||
|
#define _SERF_PRIVATE_H_
|
||||||
|
|
||||||
|
+#include <stdbool.h>
|
||||||
|
+
|
||||||
|
/* ### what the hell? why does the APR interface have a "size" ??
|
||||||
|
### the implication is that, if we bust this limit, we'd need to
|
||||||
|
### stop, rebuild a pollset, and repopulate it. what suckage. */
|
||||||
|
@@ -284,6 +286,10 @@ struct serf_connection_t {
|
||||||
|
/* Calculated connection latency. Negative value if latency is unknown. */
|
||||||
|
apr_interval_time_t latency;
|
||||||
|
|
||||||
|
+ /* Wait for connect: connect() returned APR_EINPROGRESS.
|
||||||
|
+ Socket not usable yet */
|
||||||
|
+ bool wait_for_connect;
|
||||||
|
+
|
||||||
|
/* Needs to read first before we can write again. */
|
||||||
|
int stop_writing;
|
||||||
|
};
|
||||||
|
|
||||||
@ -1,30 +0,0 @@
|
|||||||
diff -up serf-1.3.9/SConstruct.python3 serf-1.3.9/SConstruct
|
|
||||||
--- serf-1.3.9/SConstruct.python3 2018-07-02 17:21:47.331685070 +0200
|
|
||||||
+++ serf-1.3.9/SConstruct 2018-07-02 17:27:12.316413515 +0200
|
|
||||||
@@ -20,6 +20,8 @@
|
|
||||||
# ====================================================================
|
|
||||||
#
|
|
||||||
|
|
||||||
+from __future__ import print_function
|
|
||||||
+
|
|
||||||
import sys
|
|
||||||
import os
|
|
||||||
import re
|
|
||||||
@@ -166,7 +168,7 @@ env.Append(BUILDERS = {
|
|
||||||
match = re.search('SERF_MAJOR_VERSION ([0-9]+).*'
|
|
||||||
'SERF_MINOR_VERSION ([0-9]+).*'
|
|
||||||
'SERF_PATCH_VERSION ([0-9]+)',
|
|
||||||
- env.File('serf.h').get_contents(),
|
|
||||||
+ env.File('serf.h').get_contents().decode('utf-8'),
|
|
||||||
re.DOTALL)
|
|
||||||
MAJOR, MINOR, PATCH = [int(x) for x in match.groups()]
|
|
||||||
env.Append(MAJOR=str(MAJOR))
|
|
||||||
@@ -183,7 +185,7 @@ CALLOUT_OKAY = not (env.GetOption('clean
|
|
||||||
|
|
||||||
unknown = opts.UnknownVariables()
|
|
||||||
if unknown:
|
|
||||||
- print 'Warning: Used unknown variables:', ', '.join(unknown.keys())
|
|
||||||
+ print('Warning: Used unknown variables:', ', '.join(unknown.keys()))
|
|
||||||
|
|
||||||
apr = str(env['APR'])
|
|
||||||
apu = str(env['APU'])
|
|
||||||
19
libserf.spec
19
libserf.spec
@ -2,20 +2,19 @@
|
|||||||
%global scons_pkg python3-scons
|
%global scons_pkg python3-scons
|
||||||
|
|
||||||
Name: libserf
|
Name: libserf
|
||||||
Version: 1.3.9
|
Version: 1.3.10
|
||||||
Release: 18
|
Release: 1
|
||||||
Summary: High-Performance Asynchronous HTTP Client Library
|
Summary: High-Performance Asynchronous HTTP Client Library
|
||||||
License: ASL 2.0
|
License: Apache-2.0
|
||||||
URL: https://serf.apache.org/
|
URL: https://serf.apache.org/
|
||||||
Source0: https://archive.apache.org/dist/serf/serf-%{version}.tar.bz2
|
Source0: https://archive.apache.org/dist/serf/serf-%{version}.tar.bz2
|
||||||
BuildRequires: gcc, %{scons_pkg}, pkgconfig, zlib-devel
|
BuildRequires: gcc, %{scons_pkg}, pkgconfig, zlib-devel
|
||||||
BuildRequires: apr-devel, apr-util-devel, krb5-devel, openssl-devel
|
BuildRequires: apr-devel, apr-util-devel, krb5-devel, openssl-devel
|
||||||
|
|
||||||
Patch0: %{name}-norpath.patch
|
Patch0: %{name}-norpath.patch
|
||||||
Patch1: %{name}-python3.patch
|
Patch1: backport-%{name}-1.3.9-errgetfunc.patch
|
||||||
Patch2: backport-%{name}-1.3.9-errgetfunc.patch
|
Patch2: 0001-fix-CC-compiler-error.patch
|
||||||
Patch3: 0001-fix-CC-compiler-error.patch
|
Patch3: backport-%{name}-1.3.9-multihome.patch
|
||||||
Patch4: 0002-fix-problem-of-scons-build-of-print.patch
|
|
||||||
%description
|
%description
|
||||||
The serf library is a C-based HTTP client library built upon the Apache
|
The serf library is a C-based HTTP client library built upon the Apache
|
||||||
Portable Runtime (APR) library. It multiplexes connections, running the
|
Portable Runtime (APR) library. It multiplexes connections, running the
|
||||||
@ -71,6 +70,12 @@ export LD_LIBRARY_PATH=%{buildroot}%{_libdir}
|
|||||||
%doc README CHANGES design-guide.txt
|
%doc README CHANGES design-guide.txt
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Aug 09 2023 xingwei <xingwei14@h-partners.com> - 1.3.10-1
|
||||||
|
- Type:requirement
|
||||||
|
- Id:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:Update to version 1.3.10
|
||||||
|
|
||||||
* Thu May 4 2023 li-miaomiao_zhr <mmlidc@isoftstone.com> - 1.3.9-18
|
* Thu May 4 2023 li-miaomiao_zhr <mmlidc@isoftstone.com> - 1.3.9-18
|
||||||
- Type:bugfix
|
- Type:bugfix
|
||||||
- ID:NA
|
- ID:NA
|
||||||
|
|||||||
BIN
serf-1.3.10.tar.bz2
Normal file
BIN
serf-1.3.10.tar.bz2
Normal file
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user