On Thu, 11 Nov 2021 23:06:44 +1100 =?UTF-8?B?4oCN5bCP5aSq?= <nos...@kota.moe> wrote: > So either the change needs to be backported to v94, or we'll just have to wait > until v95 (or compile the browser ourselves)
I was a bit adventurous and tried doing a binary patch on the current debian version (94.0-1), and got it working. If you open /usr/lib/firefox/libxul.so in a hex editor and go to file offset 0x46a4703, you can perform a find and replace with the below hex strings: find: 498B5C2408904889DFFF157FBD9703EBF5 replace: 4D8B6C2408904C89EFFF157FBD9703EBDA This effectively performs the following changes to the binary: --- libxul.so.S.before 2021-11-12 03:15:52.985702747 +1100 +++ libxul.so.S.after 2021-11-12 04:13:27.364102267 +1100 @@ -18661992,15 +18661992,15 @@ 4e956f2: 41 ff d5 call *%r13 4e956f5: 48 8d 0d cc 87 96 03 lea 0x39687cc(%rip),%rcx # 87fdec8 <_ZZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEclEcE5__nul@@xul94+0xaed18> 4e956fc: 48 8d 15 cd 87 96 03 lea 0x39687cd(%rip),%rdx # 87fded0 <_ZZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEclEcE5__nul@@xul94+0xaed20> 4e95703: 48 83 7b 40 00 cmpq $0x0,0x40(%rbx) 4e95708: 74 11 je 4e9571b <atp_promote_thread_to_real_time@@xul94+0xd18bb> - 4e9570a: 49 8b 5c 24 08 mov 0x8(%r12),%rbx + 4e9570a: 4d 8b 6c 24 08 mov 0x8(%r12),%r13 4e9570f: 90 nop - 4e95710: 48 89 df mov %rbx,%rdi + 4e95710: 4c 89 ef mov %r13,%rdi 4e95713: ff 15 7f bd 97 03 call *0x397bd7f(%rip) # 8811498 <nspr_use_zone_allocator@@xul94+0x5258> - 4e95719: eb f5 jmp 4e95710 <atp_promote_thread_to_real_time@@xul94+0xd18b0> + 4e95719: eb da jmp 4e956f5 <atp_promote_thread_to_real_time@@xul94+0xd1895> 4e9571b: 8b 02 mov (%rdx),%eax 4e9571d: 83 c0 ff add $0xffffffff,%eax 4e95720: 83 f8 01 cmp $0x1,%eax 4e95723: 0f 87 13 02 00 00 ja 4e9593c <atp_promote_thread_to_real_time@@xul94+0xd1adc> 4e95729: 4c 8b 29 mov (%rcx),%r13 This basically changes the binary such that it no longer infinite loops in the PulseStream::stop() function, and actually checks self.drain_timer every loop as it's supposed to