Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Changelog

All notable changes to this project will be documented in this file.

## [Unreleased]

> **⚠️ Pre-release** — API may change. Feedback welcome via [GitHub Issues](https://github.com/ICICLE-ai/ArrayMorph/issues).

### Added
- **Python Package & API**: ArrayMorph is now available via `pip install arraymorph`. You can now dynamically configure AWS S3, Azure Blob Storage, or any S3-compatible endpoints directly from Python (`arraymorph.configure_s3(...)` and `arraymorph.configure_azure(...)`).
- **Pre-built Binaries**: Pre-compiled binaries of `lib_arraymorph` are now attached to GitHub releases for Linux (x86_64, aarch64) and macOS (Apple Silicon).
- **Expanded Documentation**: The README has been overhauled with comprehensive How-To guides, tutorials, and a detailed explanation of ArrayMorph's chunked storage model and async I/O.

### Changed
- **Simplified Build System**: The build system has been revamped. It now leverages `uv` for Python environments and `vcpkg` for fetching C++ SDK dependencies, making building from source much smoother.
9 changes: 8 additions & 1 deletion lib/include/arraymorph/s3vl/initialize.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,16 @@ inline herr_t S3VLINITIALIZE::s3VL_initialize_init(hid_t vipl_id) {
// Aws::SDKOptions options; // Changed to use global sdk options for proper
// shutdown
g_sdk_options.loggingOptions.logLevel = Aws::Utils::Logging::LogLevel::Off;
// curl_global_init/cleanup is not re-entrant and must be called exactly once
// per process. Python (or another loaded library) may already own that
// lifecycle. Delegating HTTP init/cleanup to the SDK causes a double-free /
// use-after-free inside Aws::Http::CleanupHttp() at process exit, resulting
// in a SIGSEGV from the HDF5 VOL terminate callback. Disabling SDK-managed
// HTTP init/cleanup avoids the crash while leaving curl usable for the SDK.
g_sdk_options.httpOptions.initAndCleanupCurl = false;
std::set_terminate([]() {
_exit(0);
}); // Shutdown conflicts with Python's interpretor shutdown on MacOS.
}); // Shutdown conflicts with Python's interpreter shutdown on macOS.
// Terminate handler catches this and exits cleanly.
Aws::InitAPI(g_sdk_options);
Logger::log("------ Init VOL");
Expand Down
Loading