SIGSEGV in libmsodbcsql during process teardown (iconv_close) on macOS arm64 with concurrent encrypted connections
Les mainteneurs répondent en général sous 2 jours
@bewithgaurav y travaille déjà.
Depuis le 20/7/2026.
Évaluation
Cette issue n'a pas encore été évaluée.
Description
Summary
On macOS arm64, the process crashes with SIGSEGV during interpreter/process teardown (exit() → __cxa_finalize_ranges), inside the driver's static destructor calling iconv_close. The crash surfaces at shutdown when multiple worker threads have been using encrypted connections (Encrypt=yes) concurrently. The process terminates with exit code 139 and no Python traceback.
This appears related to, but distinct from, #668 (TLS stream corruption on concurrent encrypted reads — data corruption, no crash) and #679 (SIGSEGV in SQLFetchScroll during concurrent fetchmany). Here the faulting frame is not SQLFetchScroll but the driver's teardown path via libiconv.
Environment
- macOS 26.5.2 (build 25F84), Apple Silicon (arm64)
- Python 3.12.11
- mssql-python 1.11.0 (bundled
libmsodbcsql.18.dylib,mssql_python/libs/macos/arm64) - SQLAlchemy 2.1.0b3
- Connection options:
Encrypt=yes,TrustServerCertificate=yes,SNAPSHOTisolation - Concurrency: multiple worker threads. mssql-python's native connection pooling is enabled (
enable_pooling=True), which uses a process-global pooling manager, so encrypted connections are pooled and reused across the process rather than being one-per-thread.
Crash
Signal: SIGSEGV / EXC_BAD_ACCESS (KERN_INVALID_ADDRESS), subtype "possible pointer authentication failure" at a wild address.
Faulting thread (from the macOS .ips crash report):
libiconv.2.dylib _citrus_iconv_close
libiconv.2.dylib __bsd_iconv_close
libmsodbcsql.18.dylib <driver frame>
libsystem_c.dylib __cxa_finalize_ranges
libsystem_c.dylib exit
libdyld.dylib dyld4::LibSystemHelpers::exit(int) const
dyld dyld4::LibSystemHelpersWrapper::exit(int) const
dyld start
So the crash happens while the process is exiting: exit() runs C++ static destructors (__cxa_finalize_ranges), one of which belongs to libmsodbcsql.18.dylib and calls iconv_close on what looks like an already-freed or corrupted iconv handle, producing a pointer-authentication failure.
Scenario
- Several worker threads read from different tables concurrently under
SNAPSHOTisolation over pooled encrypted connections (Encrypt=yes). - The application begins shutting down (an unrelated application-level error triggers a fail-fast
exit()) while those threads/connections are still being torn down. - During
exit(), the driver's static-destructor cleanup segfaults iniconv_close.
The iconv involvement is notable: iconv is the character-encoding conversion layer, and #668 reports TLS/stream corruption specifically under concurrent encrypted reads on arm64. A corrupted iconv handle that only faults at driver finalization is consistent with encoding/stream state being left in a bad state under that same concurrency.
Relation to existing issues
- #668 — TLS stream corruption on concurrent encrypted reads (arm64): data corruption / protocol errors, no hard crash.
- #679 — SIGSEGV in
SQLFetchScrollduring concurrentfetchmany(arm64).
This report is a third manifestation on the same platform and connection profile (macOS arm64, Encrypt=yes, concurrent threaded reads), but the crash occurs at process teardown via libiconv, not during an active fetch. Filing separately so the teardown/iconv stack is tracked; it may share the root cause reported in #668.
Notes
- No Python-level exception is raised for the crash itself; only the exit code (139) and the macOS crash report indicate it.
- Langage dominant
- Python
- Étoiles
- 478
- Forks
- 62
- Merge moyen
- 3 j 19 min
- PR mergées (30 j)
- 28
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de microsoft/mssql-python
-
area: bulk-copy triage needed
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
microsoft/mssql-python#843 · 1 commentaire ·
Les mainteneurs répondent en général sous 2 jours
-
triage needed
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
microsoft/mssql-python#846 · 1 commentaire ·
Les mainteneurs répondent en général sous 2 jours
-
macOS: encrypted connections fail after Homebrew moved the `openssl` alias to `openssl@4`Peut-être pris @bewithgaurav l’a pris il y a 15 jours. Ouvertearea: packaging-platform bug triage needed
Difficulté 4/5 3-5 jours Accessibilité débutants 55/100
microsoft/mssql-python#826 · 2 commentaires · 1 personne assignée ·
Les mainteneurs répondent en général sous 2 jours
-
Announcement: mssql-python is coming to Django through mssql-django 2.0Peut-être à nouveau libre @bewithgaurav l’a pris il y a 41 jours, et aucune pull request n’est ouverte. Ouverteannouncement
microsoft/mssql-python#748 · 1 personne assignée ·
Les mainteneurs répondent en général sous 2 jours
-
Connection pool can briefly exceed max_size when pooling is disabled under loadPeut-être pris @bewithgaurav l’a pris il y a 24 jours. Ouvertearea: connectivity-auth bug triage done under development
Difficulté 4/5 3-5 jours Accessibilité débutants 62/100
microsoft/mssql-python#746 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 2 jours
Toutes les issues de microsoft/mssql-python
Issues similaires
-
approved Good First Issue scope: docs
Difficulté 1/5 Moins d'une heure Accessibilité débutants 85/100
hiero-ledger/hiero-sdk-python#2730 · 3 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
wemake-services/wemake-django-template#3178 · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
-
md/asciidoc/csv: an explicit `encoding="utf-8"` keeps a leading BOM, the auto-detect path drops itOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
docling-project/docling#4846 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
neurostuff/NiMARE#1181 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
pytest-dev/pytest#15180 ·
Les mainteneurs répondent en général sous 1 jour