gnome-shell/js/ui
Sebastian Keller feb1c57dde status/network: Fix WirelessNetwork related leaks
NetworkManager frequently refreshes the list of available access points.
For some reason this often ends up removing some or all access points
only to add them back in a later refresh later. With the exception of
the currently connected access point, which is never removed.

When all access points of a WirelessNetwork have been removed, it gets
destroyed by NMWirelessDeviceItem::_removeAccessPoint(). This however
does not happen for the currently connected network due to the always
present access point. If this network now happens to consist of multiple
access points, the "unused" NMAccessPoints will get removed and added
in these refreshes, without the WirelessNetwork getting destroyed.

Whenever such an unused access point is added, due to the use of signal
tracking this leaks the NMAccessPoint and SignalTracker until the
WirelessNetwork is destroyed.

However when the NMWirelessDeviceItem is destroyed, for example due to
suspending, it stops tracking access point changes, ensuring that the
condition for the WirelessNetwork being destroyed can not occur anymore.

Even with just two access points, such as can be found in 2.4GHz+5GHz
home routers this issue leaks hundreds of NMAccessPoints and
SignalTrackers per day. As well as a small number of WirelessNetworks
which are also kept alive by the SignalTrackers.

To fix this disconnect from the access point when it gets removed and
destroy all remaining networks when the NMWirelessDeviceItem is
destroyed.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2652>
2023-02-18 21:34:56 +00:00
..
components general: Rename "application" to "app" 2023-02-07 14:46:28 +00:00
status status/network: Fix WirelessNetwork related leaks 2023-02-18 21:34:56 +00:00
accessDialog.js accessDialog: Don't add an empty body 2023-01-17 13:51:54 +00:00
altTab.js altTab: Always include label in thumbnail 2022-10-18 18:04:57 +00:00
animation.js js: Use (dis)connectObject() 2022-03-04 14:14:37 +00:00
appDisplay.js general: Rename "application" to "app" 2023-02-07 14:46:28 +00:00
appFavorites.js Adopt EventEmitter class instead of injecting Signal methods 2022-07-04 18:30:49 -04:00
appMenu.js js: Queue 'later' via MetaLaters 2022-12-16 22:12:59 +01:00
audioDeviceSelection.js js: Queue 'later' via MetaLaters 2022-12-16 22:12:59 +01:00
background.js environment: Define promisify of g_query_info_async in the global scope 2023-02-13 00:01:08 +00:00
backgroundMenu.js backgroundMenu: Drop grab-op-begin signal connection 2023-01-30 12:19:22 +00:00
barLevel.js cleanup: Define GObject accessors in camelCase 2021-02-03 20:19:29 +01:00
boxpointer.js js: Use (dis)connectObject() 2022-03-04 14:14:37 +00:00
calendar.js calendar: Unbind settings when destroying 2022-11-25 22:09:37 +01:00
checkBox.js checkbox: Improve accessibility of check boxes for Orca users 2020-03-29 12:56:33 +00:00
closeDialog.js general: Rename "application" to "app" 2023-02-07 14:46:28 +00:00
ctrlAltTab.js cleanup: Use new indentation style for object literals 2022-02-23 12:23:52 +00:00
dash.js general: Rename "application" to "app" 2023-02-07 14:46:28 +00:00
dateMenu.js dateMenu: Use desktop action to open Evolution calendar 2023-02-12 20:14:02 +00:00
dialog.js js: Queue 'later' via MetaLaters 2022-12-16 22:12:59 +01:00
dnd.js Adopt EventEmitter class instead of injecting Signal methods 2022-07-04 18:30:49 -04:00
edgeDragAction.js edgeDragAction: Drop grab-op-begin signal connection 2023-01-30 12:19:22 +00:00
endSessionDialog.js loginManager: Return objects instead of multiple booleans 2022-08-01 20:58:37 +02:00
environment.js environment: Define promisify of g_query_info_async in the global scope 2023-02-13 00:01:08 +00:00
extensionDownloader.js extensionDownloader: Compile gsettings schemas after install 2023-02-13 00:01:08 +00:00
extensionSystem.js extensions: Refactor extension system for asynchronous loading 2022-12-01 12:59:32 +00:00
focusCaretTracker.js Adopt EventEmitter class instead of injecting Signal methods 2022-07-04 18:30:49 -04:00
grabHelper.js Require both mouse and keyboard grabs for some grabs to be successful 2022-05-04 17:28:08 +00:00
ibusCandidatePopup.js ibusCandidatePopup: Prevent it from covering screenshot UI 2022-07-04 13:38:15 +00:00
iconGrid.js appDisplay: Move findBestPageToAppend() behavior to IconGrid 2023-02-01 12:56:28 +00:00
inhibitShortcutsDialog.js general: Rename "application" to "app" 2023-02-07 14:46:28 +00:00
init.js init: Set console log domain 2021-09-01 14:55:47 +00:00
kbdA11yDialog.js kbdA11yDialog: Use MetaKeyboardA11yFlags 2022-06-16 09:38:20 +00:00
keyboard.js keyboard: Change osk menu entry to control-center keyboard pane 2022-11-24 13:49:55 +01:00
layout.js layout: Add work-around for testing greeter UI in nested 2023-02-09 19:59:12 +01:00
lightbox.js js: Use (dis)connectObject() 2022-03-04 14:14:37 +00:00
locatePointer.js locatePointer: Bind ripples creation to settings 2019-09-09 19:28:18 +00:00
lookingGlass.js js: Queue 'later' via MetaLaters 2022-12-16 22:12:59 +01:00
magnifier.js Adopt EventEmitter class instead of injecting Signal methods 2022-07-04 18:30:49 -04:00
main.js general: Rename "application" to "app" 2023-02-07 14:46:28 +00:00
messageList.js messageList: Only close messages via delete key if they can be closed 2022-06-04 15:23:45 +02:00
messageTray.js signalTracker: Explicitly register destroyable types 2022-03-06 00:10:03 +00:00
modalDialog.js Require both mouse and keyboard grabs for some grabs to be successful 2022-05-04 17:28:08 +00:00
mpris.js cleanup: Use deepUnpack() intead of deep_unpack() 2022-08-10 10:29:24 +00:00
notificationDaemon.js general: Rename "application" to "app" 2023-02-07 14:46:28 +00:00
osdMonitorLabeler.js js: Get monitor manager from backend 2022-12-16 22:12:59 +01:00
osdWindow.js osdWindow: Implement new OSD design 2022-02-12 15:28:52 +00:00
overview.js overview: Skip SHOWN to SHOWN when changing from app grid to overview 2023-02-12 16:31:04 +00:00
overviewControls.js general: Rename "application" to "app" 2023-02-07 14:46:28 +00:00
padOsd.js general: Rename "application" to "app" 2023-02-07 14:46:28 +00:00
pageIndicators.js cleanup: Use new indentation style for object literals 2022-02-23 12:23:52 +00:00
panel.js quickSettings: Add background apps menu 2023-02-12 16:16:36 +00:00
panelMenu.js js: Use templates for non-translatable strings 2022-02-12 12:29:52 +00:00
pointerA11yTimeout.js ui: Use ClutterSeat for keyboard/pointer a11y 2020-01-30 17:49:08 +00:00
pointerWatcher.js js: Get idle monitor from backend 2021-05-18 13:42:52 +00:00
popupMenu.js popupMenu: Close quick settings when activating settings action 2022-08-02 16:05:28 +00:00
quickSettings.js quickSettings: Remove null checks 2023-02-12 16:16:36 +00:00
remoteSearch.js search: Stop special-casing GNOME Settings on search 2022-12-15 19:02:02 +00:00
ripples.js cleanup: Use new indentation style for object literals 2022-02-23 12:23:52 +00:00
runDialog.js runDialog: Use single quotes for Wayland restart warning 2022-05-31 18:35:41 +00:00
screenShield.js general: Rename "application" to "app" 2023-02-07 14:46:28 +00:00
screenshot.js screenshot: Cache ScreencastSupported property 2022-11-09 11:15:04 +00:00
scripting.js tests: Add test running basic perf test 2022-11-25 22:09:53 +01:00
search.js js: Queue 'later' via MetaLaters 2022-12-16 22:12:59 +01:00
searchController.js searchController: Use connectObject for the stage key focus signal 2022-11-25 22:09:37 +01:00
sessionMode.js fileUtils: Refactor collectFromDatadirs to be a generator 2022-12-01 12:59:32 +00:00
shellDBus.js general: Rename "application" to "app" 2023-02-07 14:46:28 +00:00
shellEntry.js shellEntry: Remove unused variable 2022-10-14 22:32:30 +00:00
shellMountOperation.js shellMountOperation: Don't read unavailable desktop file 2023-02-02 19:33:10 +01:00
slider.js slider: Use Clutter.grab() for implicit grab 2022-01-29 01:16:29 +01:00
swipeTracker.js swipeTracker: Drop grab-op-begin signal connection 2023-01-30 12:19:22 +00:00
switcherPopup.js js: Use (dis)connectObject() 2022-03-04 14:14:37 +00:00
switchMonitor.js js: Get monitor manager from backend 2022-12-16 22:12:59 +01:00
unlockDialog.js lockscreen: Style cleanup for lock and login 2023-01-06 11:29:31 +00:00
userWidget.js js: Use (dis)connectObject() 2022-03-04 14:14:37 +00:00
welcomeDialog.js cleanup: Use new indentation style for object literals 2022-02-23 12:23:52 +00:00
windowAttentionHandler.js js: Use (dis)connectObject() 2022-03-04 14:14:37 +00:00
windowManager.js windowManager: Drop grab-op-begin signal connection 2023-01-30 12:19:22 +00:00
windowMenu.js panel,windowMenu: Update to meta_window_begin_grab_op() API change 2023-01-30 12:19:22 +00:00
windowPreview.js js: Queue 'later' via MetaLaters 2022-12-16 22:12:59 +01:00
workspace.js workspace: Port WorkspaceBackground allocate to C 2022-08-03 12:30:31 +00:00
workspaceAnimation.js workspaceAnimation: Get time outside of the animation-complete callback 2022-03-13 00:06:03 +00:00
workspacesView.js workspacesView: Remove obsolete cleanup 2023-02-04 23:54:42 +00:00
workspaceSwitcherPopup.js js: Use (dis)connectObject() 2022-03-04 14:14:37 +00:00
workspaceThumbnail.js js: Queue 'later' via MetaLaters 2022-12-16 22:12:59 +01:00
xdndHandler.js Adopt EventEmitter class instead of injecting Signal methods 2022-07-04 18:30:49 -04:00