I looked at the files/ssl-openssl.c in this port. In the
ssl_openssl_write function, if there is an error other than
SSL_ERROR_WANT_READ or SSL_ERROR_WANT_WRITE then the execution falls
through to return 0.

I changed the code to include the actual result from the SSL_get_error
function in the debug message, and return -1 instead of falling through
to return 0. The ssl_gnutls_write function does that, and it seems quite
similar. Not sure which one is based upon the other. ssl_gnutls_write
also sets errno = EIO in this situation, so I added that as well.  The
ssl_openssl_read function is quite similar, and though I have not seen
any errors from that, I made the same changes there.

This has made a big improvement, I still see a few errors, maybe 10 or
12 at a time, which are all "openssl: send failed: 5" but not the many
thousands that I saw before. The cpu load of the finch process stays
quite low.

I tried to make a diff for this. It seems to fix my problem, but don't
know if introduces any others, so I offer it for what it's worth....



Index: Makefile
===================================================================
RCS file: /cvs/ports/net/pidgin/Makefile,v
retrieving revision 1.161
diff -u -p -u -r1.161 Makefile
--- Makefile    27 Sep 2023 14:18:28 -0000      1.161
+++ Makefile    19 Apr 2024 02:21:26 -0000
@@ -3,6 +3,7 @@ COMMENT-finch=  multi-protocol instant me
 COMMENT-libpurple= multi-protocol instant messaging library
 
 VERSION=       2.14.12
+REVISION=      0
 DISTNAME=      pidgin-${VERSION}
 PKGNAME-main=  pidgin-${VERSION}
 PKGNAME-finch= finch-${VERSION}
Index: files/ssl-openssl.c
===================================================================
RCS file: /cvs/ports/net/pidgin/files/ssl-openssl.c,v
retrieving revision 1.11
diff -u -p -u -r1.11 ssl-openssl.c
--- files/ssl-openssl.c 11 Mar 2022 19:46:55 -0000      1.11
+++ files/ssl-openssl.c 19 Apr 2024 02:21:26 -0000
@@ -203,8 +203,9 @@ ssl_openssl_read(PurpleSslConnection *gs
                        return (-1);
                }
 
-               purple_debug_error("openssl", "receive failed: %zi\n", s);
-               s = 0;
+               purple_debug_error("openssl", "receive failed: %d\n", ret);
+               errno = EIO;
+               return (-1);
        }
 
        return (s);
@@ -229,8 +230,9 @@ ssl_openssl_write(PurpleSslConnection *g
                        return (-1);
                }
 
-               purple_debug_error("openssl", "send failed: %zi\n", s);
-               s = 0;
+               purple_debug_error("openssl", "send failed: %d\n", ret);
+               errno = EIO;
+               return (-1);
        }
 
        return (s);


-- 
Allan Streib
Luddy School of Informatics, Computing, and Engineering
Indiana University

Reply via email to