When the last output is disconnected, output_disable is called like usual and evacuates the output to the root->saved_workspaces list. It then calls root_for_each_container to remove (untrack) the output from each container's outputs list. However root_for_each_container did not iterate the saved workspaces, so when the output gets freed the containers would have a dangling pointer in their outputs list. Upon reconnect, container_discover_outputs would attempt to use the dangling pointer, causing a crash. This makes root_for_each_container check the saved workspaces list, which fixes the problem. |
||
|---|---|---|
| .. | ||
| arrange.c | ||
| container.c | ||
| node.c | ||
| output.c | ||
| root.c | ||
| view.c | ||
| workspace.c | ||