| Summary: | Crash with e4 demo | ||
|---|---|---|---|
| Product: | [RT] RAP | Reporter: | Ralf Sternberg <rsternberg> |
| Component: | RWT | Assignee: | Project Inbox <rap-inbox> |
| Status: | RESOLVED FIXED | QA Contact: | |
| Severity: | normal | ||
| Priority: | P3 | ||
| Version: | 3.0 | ||
| Target Milestone: | 3.1 M1 | ||
| Hardware: | All | ||
| OS: | All | ||
| Whiteboard: | sr301 | ||
Fixed with commit b25f150b: Render destroy operations after rendering widgets With support for reparenting, it can now happen that the old parent is disposed in the same request than the set parent operation. When the client receives the destroy operation, it will also destroy all children, including those that are to be reparented. The set parent operation will then lead to a crash because the widget has been already destroyed. By rendering destroy operations after all widgets, this cannot happen anymore. Backported to 3.0-maintenance branch with commit 1fe24b3e5e74cd3e3535e1ab0fbb5c1bd94badd8. |
I observe a reproducible client crash with the demo in the e4 incubator project, provoked by the server sending a set operation for a widget (a CTabFolder) that does not seem to exist anymore. Chances are this is related to re-parenting. To reproduce: - Run the launch config in the e4 demo project - press OK in the login dialog to start the workbench - minimize a part, a side bar appears - in this side bar, click on an item to open a fast view - click the item again to close the fast view Here's the error message: Error: Error: Operation "set" on target "w25" of type "null" failed: Cannot read property 'object' of undefined Properties: parent = w11 tabIndex = 8 Script: {"head":{},"operations":[["destroy","w154"],["set","w11",{"children":["w126","w115","w41","w25"]}],["set","w25",{"parent":"w11","tabIndex":8}],["set","w42",{"tabIndex":10}],["set","w37",{"tabIndex":11}],["set","w45",{"tabIndex":12}],["set","w50",{"tabIndex":14}],["set","w51",{"tabIndex":15}],["set","w52",{"tabIndex":17}],["set","w53",{"tabIndex":18}],["set","w109",{"tabIndex":19}],["set","w113",{"tabIndex":20}],["set","w125",{"tabIndex":21}],["set","w131",{"tabIndex":22}],["set","w132",{"tabIndex":23}],["set","w12",{"activeControl":"w114","children":["w14","w15","w145"]}],["set","w24",{"tabIndex":5}],["set","w34",{"tabIndex":7}],["set","w13",{"tabIndex":8}],["set","w114",{"tabIndex":10}],["set","w123",{"tabIndex":11}],["set","w26",{"tabIndex":12}],["set","w27",{"tabIndex":13}],["set","w58",{"tabIndex":15}],["set","w56",{"tabIndex":16}],["set","w61",{"tabIndex":18}],["set","w149",{"tabIndex":20}],["set","w1",{"focusControl":"w114"}]]} Stack: Error: Operation "set" on target "w25" of type "null" failed: Cannot read property 'object' of undefined Properties: parent = w11 tabIndex = 8 at Object.rwt.remote.MessageProcessor._processError (http://127.0.0.1:48942/rwt-resources/rap-client.js:61405:11) at Object.rwt.remote.MessageProcessor.processOperationArray (http://127.0.0.1:48942/rwt-resources/rap-client.js:61246:12) at Object.rwt.remote.MessageProcessor.processMessage (http://127.0.0.1:48942/rwt-resources/rap-client.js:61198:12) at rwt.qx.Class.define.members._handleSuccess (http://127.0.0.1:48942/rwt-resources/rap-client.js:61882:19) at Object._success (http://127.0.0.1:48942/rwt-resources/rap-client.js:31395:43) at Object.rwt.remote.Request._onReadyStateChange (http://127.0.0.1:48942/rwt-resources/rap-client.js:31446:18) at XMLHttpRequest. (http://127.0.0.1:48942/rwt-resources/rap-client.js:624:17) Debug: on Request: {"head":{"requestCounter":108},"operations":[["set","w12",{"activeControl":"w149"}],["set","w152",{"selection":false}],["notify","w152","Selection",{"button":1,"shiftKey":false,"ctrlKey":false,"altKey":false}],["set","w1",{"cursorLocation":[1637,185],"focusControl":"w149"}]]}