Skip to content

[WIP] obs-browser: GPU-process-loss resilience + OnAcceleratedPaint teardown guard - #739

Closed
summeroff wants to merge 6 commits into
streamlabsfrom
fix/onacceleratedpaint-race
Closed

summeroff wants to merge 6 commits into
streamlabsfrom
fix/onacceleratedpaint-race

Conversation

@summeroff

@summeroff summeroff commented Jun 8, 2026 •

Copy link
Copy Markdown

Summary

Bumps plugins/obs-browser to the merged streamlabs/obs-browser#54, which hardens hardware-accelerated browser sources against the libcef crash spike on Streamlabs Desktop 1.21.x. Branched from 31.1.2sl19.

Change

plugins/obs-browser: 2660d9b -> 4002dac   (squash-merge of obs-browser#54 on streamlabs)

Submodule gitlink only, no other files. The merged commit contains:

  1. --disable-gpu-process-crash-limit (primary) — survive transient GPU-process loss instead of escalating to Chromium's fatal IntentionallyCrashBrowserForUnusableGpuProcess() ("GPU process isn't usable. Goodbye.").
  2. Re-check validity under the graphics lock in OnAcceleratedPaint (secondary hardening) — close a teardown TOCTOU window.

Root cause

Both Sentry-reported crashes share gpu_data_manager_impl_private.cc:454: GPU process isn't usable. Goodbye. — Chromium deliberately aborting after CEF's GPU process dies past its crash limit, correlated with a host D3D11 device removal / TDR (887A0005, "Rebuilding all assets", shared-texture rebuild failures). The crash-limit flag is the primary mitigation; the OnAcceleratedPaint guard is secondary. Full analysis and verification status in streamlabs/obs-browser#54.

Verification

  • obs-browser#54 builds clean (combined tree, exit 0) and is merged to streamlabs.
  • This PR is a gitlink-only change pointing at that squash commit (4002dac).

Status

obs-browser#54 is merged; this PR now points at its squash commit 4002dac on streamlabs (no longer the pre-merge PR-branch pointer). Ready to merge.

summeroff and others added 2 commits June 8, 2026 13:29
Bump plugins/obs-browser to 5b30996 to pull in the OnAcceleratedPaint
teardown-race guard (streamlabs/obs-browser#54), which fixes the libcef
crash on BrowserManagerThread seen in dual-output sessions with browser
sources. Branched from 31.1.2sl19.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Bump plugins/obs-browser 5b30996 -> 9d18953 to add --disable-gpu-process-crash-limit
(streamlabs/obs-browser#54), so a transient GPU reset (TDR) no longer escalates to
Chromium's fatal 'GPU process isn't usable' abort. Combines with the OnAcceleratedPaint
teardown guard already in this bump.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@summeroff summeroff changed the title obs-browser: re-check validity under graphics lock in OnAcceleratedPaint obs-browser: GPU-process-loss resilience + OnAcceleratedPaint teardown guard Jun 9, 2026
Bump plugins/obs-browser 9d18953 -> 4002dac, the squash-merge of
streamlabs/obs-browser#54 on streamlabs (GPU-process crash-limit flag +
OnAcceleratedPaint teardown guard). Replaces the pre-merge PR-branch pointer.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@summeroff summeroff changed the title obs-browser: GPU-process-loss resilience + OnAcceleratedPaint teardown guard [WIP] obs-browser: GPU-process-loss resilience + OnAcceleratedPaint teardown guard Jun 26, 2026
aleksandr-voitenko and others added 3 commits June 30, 2026 12:45
* libobs-winrt: Guard WGC capture against removed graphics device (#733)

* Guard DirectShow filter activation (#740)

* libobs: append message/get_messages to obs_source_info (#735)

* libobs: bound volmeter plane index against MAX_AV_PLANES (#737)

* libobs: mix scene-item audio when item canvas is unset (#738)

* libobs: Fix use-after-free of canvas view in audio thread (#736)

* Add structured module load failures (#741)

* Fix NDI 6 runtime loading on macOS

---------

Co-authored-by: Vladimir <summeroff@gmail.com>
* reset texrender->rendered flag when canvas switches
* call gs_texrender_reset() when rendering_mode changes
#749)

* Fix rare crash dump for mac-virtualcam users. Looking at call stack,
we need to populate the Dictionary with the OBS->ColorSpace entries.
* Note: encoder.c has some obs->vt colorspace conversion functions but only
looked at those to double check these values: obs_to_vt_colorspace, obs_to_vt_primaries, &
obs_to_vt_transfer

fix crash dump:
https://streamlabs-desktop.sentry.io/issues/6807279193/?project=1283431&query=is%3Aunresolved%20os.name%3AmacOS%20release%3A1.21.%2A&referrer=issue-stream&sort=freq
@summeroff

Copy link
Copy Markdown
Author

Re-evaluation after the OBS 32.1.1 merge (#734): this PR is now redundant

Checked against streamlabs @ 2edf09bbd. The fix from obs-browser#54 already ships on streamlabs — merging this PR would move three submodules backwards.

Why it's already in

obs-browser merged #54 first, then merged its own OBS32 branch on top:

2f5161c  Merge pull request #53 from streamlabs/obs_merge_32.1.1   <- streamlabs points here today
4002dac  Harden browser source against GPU-process loss + OnAcceleratedPaint teardown race (#54)
8a3b5e8  Merge upstream obs-browser 2.26.8 into obs_merge_32.1.1
2660d9b  Merge pull request #52 from streamlabs/obs_merge_31.1.2   <- this PR's merge base

git merge-base --is-ancestor 4002dac 2f5161c → true.

Both hunks verified physically present in the tree at 2f5161c, so nothing was dropped in obs-browser's own OBS32 merge resolution:

  • browser-app.cpp:110 — command_line->AppendSwitch("disable-gpu-process-crash-limit"); (with the "Survive transient GPU-process loss" comment)
  • browser-client.cpp — the /* Re-check under the lock: ... */ + if (!valid()) { obs_leave_graphics(); return; } block after obs_enter_graphics() in OnAcceleratedPaint

What merging it would cost

submodule streamlabs this PR effect
plugins/obs-browser 2f5161c 4002dac regress — drops obs-browser's entire OBS32 merge
plugins/mediasoup-connector 7ea6f2c 7a8e2f6 regress — reverts #745 (libmediasoupclient 3.5.0 + webrtc m140)
plugins/obs-ndi 785194e d76cf94 content-identical tree; d76cf94 is the pre-merge SHA of the same fix
deps/libdshowcapture/src 48a97c9 48a97c9 identical

The remaining files in the diff (libobs/*, libobs-winrt/winrt-capture.cpp, plugins/mac-virtualcam/..., .gitmodules) are the cherry-picked #746/#749/#751 commits, all of which landed on streamlabs under their canonical SHAs. .gitmodules already reads branch = streamlabs for obs-ndi on both sides.

Suggested action

Close as already-shipped. No re-targeting or conflict resolution is worthwhile — there is no unique payload left to carry forward.

@summeroff summeroff closed this Jul 27, 2026
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.

3 participants