Ticket #399 (closed defect: fixed)

Opened 2 years ago

Last modified 19 months ago

Destroying buffers in RPC rundown causes processes with loaded vbuf backends to crash

Reported by: jteh Owned by:
Priority: major Milestone: 2010.2
Component: Browse mode Version: development
Keywords: appCrash Cc:
Operating system: Blocked by:
Blocking:

Description

Str:

  1. Load at least one buffer with NVDA; e.g. go to a web page in Firefox or IE.
  2. Open Task Manager.
  3. Terminate the NVDA process.

Actual: The process containing the loaded buffer crashes.
Expected: The process should not crash.

Additional info:

  • If you have multiple processes with loaded vbuf backends, all of them will crash.
  • With a debug build, this triggers the assertion assert(runningBackends.count(this) == 0); in VBufBackend_t::~VBufBackend_t() in backend.cpp line 191.

Change History

comment:1 Changed 2 years ago by jteh

Cause: RPC run down gets executed when NVDA dies, but all hooks were set in NVDA's process, so they get removed just before the RPC run down executes. Therefore, renderThread_terminate() never gets executed. Other hell probably occurs as well to actually cause the crash, but this is definitely the start of the problem.

The proper solution requires some redesign of nvdaHelper and is too complex for 2009.1. For now, we should just remove the RPC run down. This will cause in-proc memory leaks if NVDA is terminated forcefully, but that's far better than a crash and NVDA should hopefully not be terminated like this too often.

comment:2 Changed 2 years ago by jteh

  • Milestone 2009.1 deleted
  • Summary changed from Killing NVDA without exiting gracefully causes processes with loaded vbuf backends to crash to Destroying buffers in RPC rundown causes processes with loaded vbuf backends to crash

r3157 disables destruction of buffers during RPC rundown. Deferring the proper fix to a future release.

comment:3 Changed 2 years ago by mdcurran

  • Milestone set to 2010.2

comment:4 Changed 21 months ago by jteh

  • Milestone changed from 2010.2 to 2010.3

comment:5 Changed 21 months ago by mdcurran

Fix implemented in changeset:nvdaHelperRemoteInjectionFix,3546.
Ticket can be closed after testing and merging of nvdaHelperRemoteInjectionFix in to main.

comment:6 Changed 20 months ago by jteh

  • Status changed from new to closed
  • Resolution set to fixed

Merged in changeset:main,3563.

comment:7 Changed 19 months ago by aleksey_s

  • Milestone changed from 2010.3 to 2010.2

It is in fact fixed in 2010.2 code cicle.

Note: See TracTickets for help on using tickets.