Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 472298

Summary: Crash with e4 demo
Product: [RT] RAP Reporter: Ralf Sternberg <rsternberg>
Component: RWTAssignee: 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

Description Ralf Sternberg CLA 2015-07-09 12:25:27 EDT
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"}]]}
Comment 1 Ralf Sternberg CLA 2015-07-10 07:00:26 EDT
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.
Comment 2 Ivan Furnadjiev CLA 2015-08-12 08:13:15 EDT
Backported to 3.0-maintenance branch with commit 1fe24b3e5e74cd3e3535e1ab0fbb5c1bd94badd8.