fix(linux): prevent segfaults during rapid module reloads
Fixes multiple issues causing segfaults when hot-reloading modules on Linux, particularly when file changes are detected rapidly: - Enable is_file_ready() check on Linux to prevent loading partially-written shared libraries (previously only used on Windows/BSD) - Fix event deduplication on Linux to actually remove duplicate inotify events instead of just marking them, preventing double-free on same module - Reorder reload operations to unload old module only after successfully copying new version, avoiding invalid state when copy fails Changes: - platform.c: Remove __linux__ guards around is_file_ready() function - platform.c: Add compaction step after deduplication to remove -1 entries - stk.c: Move module unload to after platform_copy_file() in reload loop These changes make Linux hot-reload as robust as Windows/BSD implementations.
This commit is contained in:
@@ -242,9 +242,6 @@ begin_operations:
|
||||
for (i = 0; i < unload_count; ++i)
|
||||
stk_module_unload(unloaded_mod_indices[i]);
|
||||
|
||||
for (i = 0; i < reload_count; ++i)
|
||||
stk_module_unload(reloaded_mod_indices[i]);
|
||||
|
||||
for (i = 0; i < reload_count; ++i) {
|
||||
int file_index = reloaded_mod_file_indices[i];
|
||||
int mod_index = reloaded_mod_indices[i];
|
||||
@@ -261,6 +258,8 @@ begin_operations:
|
||||
continue;
|
||||
}
|
||||
|
||||
stk_module_unload(mod_index);
|
||||
|
||||
load_result = stk_module_load(tmp_path, mod_index);
|
||||
if (load_result != STK_MOD_INIT_SUCCESS) {
|
||||
stk_log(stderr, "Failed to reload module %s: %s",
|
||||
|
||||
Reference in New Issue
Block a user