Skip to content

Keep vtable hooks installed until extension unload#2513

Open
Mikusch wants to merge 2 commits into
alliedmodders:k/sourcehook_alternativefrom
Mikusch:persistent-vtable-hooks
Open

Keep vtable hooks installed until extension unload#2513
Mikusch wants to merge 2 commits into
alliedmodders:k/sourcehook_alternativefrom
Mikusch:persistent-vtable-hooks

Conversation

@Mikusch

@Mikusch Mikusch commented Jul 19, 2026

Copy link
Copy Markdown
Contributor

Removing the last callback of a vtable hook deleted the CVTableHookDetails the next frame, but KHook::RemoveHook(id, true) only queues the actual unlink on a worker thread. Until that ran, the hook kept dispatching through freed memory. Instead of tearing hooks down at runtime, they now stay installed until the extension unloads, and dispatch just bails out early when nothing is hooked anymore. While in there, I also refactored the copy-pasted dispatch code in sdkhooks.

@Kenzzer

Kenzzer commented Jul 23, 2026

Copy link
Copy Markdown
Member

I'm almost okay to take this as-is, nice refactoring btw. But I will make a commit of my own on the PR to keep the unhook behaviour as it currently is, no specific reasons other than I don't want to diverge too much from SH baseline until the other PR lands. We can always revisit the unhooking process then.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants