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