Bug 233469 - knetworkmanager confused by /etc/init.d/network restart
Summary: knetworkmanager confused by /etc/init.d/network restart
Status: RESOLVED INTENTIONAL
Alias: None
Product: knetworkmanager
Classification: Miscellaneous
Component: general (show other bugs)
Version: unspecified
Platform: openSUSE Unspecified
: NOR normal
Target Milestone: ---
Assignee: Will Stephenson
URL:
Keywords:
: 223080 236521 (view as bug list)
Depends on:
Blocks:
 
Reported: 2010-04-06 11:36 UTC by Tristan Miller
Modified: 2011-02-01 01:11 UTC (History)
3 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
hack to restart knetworkmanager (1.45 KB, patch)
2010-05-03 05:15 UTC, Lamarque V. Souza
Details
hack to restart knetworkmanager if it was running. (1.95 KB, patch)
2010-05-18 07:11 UTC, Lamarque V. Souza
Details
hack to restart knetworkmanager if it was running. (2.00 KB, patch)
2010-05-18 09:12 UTC, Lamarque V. Souza
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Tristan Miller 2010-04-06 11:36:22 UTC
Version:            (using KDE 4.4.2)
Installed from:    openSUSE RPMs

Reproducibility: Always

Steps to reproduce:
1. Make sure knetworkmanager is running and that a network connection is active
2. As root, run (as appropriate for one's system)
# rcnetwork restart
or
# /etc/init.d/network restart

Observed behaviour:
3. The knetworkmanager system tray icon changes to a blue W.  Right-clicking on it does not list any available networks; there are only grayed-out options.
It's now completely useless and must be manually killed and restarted.
Comment 1 Lamarque V. Souza 2010-05-03 05:06:37 UTC
I tried to figure out why this is happening but failed. I have found some weird berhaviour in solid networkmanager support (knetworkmanager also has the same behaviour). For some reason solid networkmanager backend (solid/networkmanager-0.7/manager.cpp) and knetworkmanager do not receive signals from networkmanager if it restarts. For instance in solid/networkmanager-0.7/manager.cpp: 

 1. NMNetworkManager::NMNetworkManager(QObject * parent, const QStringList &) 
 2. {
 3.    qDBusRegisterMetaType<QList<QDBusObjectPath> >();
 4.    d_ptr = new NMNetworkManagerPrivate;
 5.    Q_D(NMNetworkManager);
 6.    d->nmState = d->iface.state();
 7.    d->isWirelessHardwareEnabled = d->iface.wirelessHardwareEnabled();
 8.    d->isWirelessEnabled = d->iface.wirelessEnabled();
 9.    connect( &d->iface, SIGNAL(DeviceAdded(const QDBusObjectPath &)),
10.                 this, SLOT(deviceAdded(const QDBusObjectPath &)));
11.     connect( &d->iface, SIGNAL(DeviceRemoved(const QDBusObjectPath &)),
12.                 this, SLOT(deviceRemoved(const QDBusObjectPath &)));
13.     connect( &d->iface, SIGNAL(PropertiesChanged(const QVariantMap &)),
14.                 this, SLOT(propertiesChanged(const QVariantMap &)));
15.     connect( &d->iface, SIGNAL(StateChanged(uint)),
16.                 this, SLOT(stateChanged(uint)));
17. 
18.     d->iface.connection().connect(QLatin1String("org.freedesktop.DBus"),
19.             QLatin1String("/org/freedesktop/DBus"), 
20. QLatin1String("org.freedesktop.DBus"),
21.             QLatin1String("NameOwnerChanged"), QLatin1String("sss"),
22.             this, SLOT(nameOwnerChanged(QString,QString,QString)));

The connects in lines 9, 11, 13, and 15 have no effect when networkmanager restart, but the connect in line 18 still works.

In knetworkmanager/monolithic/knetworkmanagertrayicon.cpp:

KNetworkManagerTrayIcon::KNetworkManagerTrayIcon(...
.
.
.
    // hide the icon when network management is unavailable
    QObject::connect(Solid::Control::NetworkManager::notifier(),
                        SIGNAL(statusChanged(Solid::Networking::Status)),
                        this,
                      SLOT(networkingStatusChanged(Solid::Networking::Status)));

The slot networkingStatusChanged sometimes is called when networkmanger stops, but it is never called when it starts again.

In knetworkmanager/backends/NetworkManager/nmdbussettingsconnectionprovider.cpp, 
NMDBusSettingsConnectionProvider::onRemoteConnectionRemoved:

if I delete d->iface and create a new one then I got a notification saying that networking system has been disabled, without this change I never get one.

I suspect for some reason all classes connected to org.freedesktop.networkmanager when networkmanager closes does not reconnect when networkmanager restarts again. I just have not figure out why.
Comment 2 Lamarque V. Souza 2010-05-03 05:10:40 UTC
I forgot to say that the networkmanagement kded module still works correctly. Even if the tray icon do not react the interfaces marked as "autoconnect" continues to connect in background and I can use the Internet normally.
Comment 3 Lamarque V. Souza 2010-05-03 05:15:08 UTC
Created attachment 43179 [details]
hack to restart knetworkmanager

This hack closes knm's tray icon when networkmanager is gone from dbus and starts it again when networkmanager registers to dbus. It is not a solution but at least makes knm restart automatically.
Comment 4 Lamarque V. Souza 2010-05-18 07:11:52 UTC
Created attachment 43680 [details]
hack to restart knetworkmanager if it was running.

This version only restarts knm if it was running when NetworkManager was closed. That way it does not disturb who uses plasma applet or nm-applet.
Comment 5 Lamarque V. Souza 2010-05-18 09:12:06 UTC
Created attachment 43682 [details]
hack to restart knetworkmanager if it was running.

It seems knm has to run after NM or it will not receive signals from Notifier, this is the problem I described in my first post. So let's do it differently. Now it works as expected, just make sure NM is running when the first instance of knm starts, knm will not work properly otherside.
Comment 6 Lamarque V. Souza 2010-10-03 03:23:07 UTC
I do not have problems with NM restart anymore. I am using KDE SC 4.5.1, NetworkManager 0.8 and svn Plasma NM from September 8th. Could someone test if this problem is really fixed?
Comment 7 Tristan Miller 2010-10-25 14:54:26 UTC
Bug 236521 appears to be a duplicate of this one.
Comment 8 Lamarque V. Souza 2011-01-30 22:52:04 UTC
*** Bug 236521 has been marked as a duplicate of this bug. ***
Comment 9 Lamarque V. Souza 2011-01-30 22:58:43 UTC
Please use Plasma NetworkManager instead of knetworkmanager, it does not suffer from this problem. Knetworkmanager monolithic is not being developed anymore.
Comment 10 Lamarque V. Souza 2011-02-01 01:11:51 UTC
*** Bug 223080 has been marked as a duplicate of this bug. ***