diff options
author | Denis Kenzior <denkenz@gmail.com> | 2009-12-02 15:33:25 -0600 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2009-12-02 19:10:07 -0600 |
commit | dac0ccc8a8696bbf0f8db26218fa5d9ff7304d4f (patch) | |
tree | 4a9c2932f0c997d9fb361797d22feec7b3f47441 /src | |
parent | cf98ebb6533223bf1ce998d3fbfde3f372951ba5 (diff) | |
download | ofono-dac0ccc8a8696bbf0f8db26218fa5d9ff7304d4f.tar.bz2 |
Fix: Remove all atoms when attempting to power off
The current behavior is to remove atoms when the modem has powered off
successfully. The modem driver must now take special precautions to
cancel all pending actions of the atom drivers, since they would have
been destroyed.
Diffstat (limited to 'src')
-rw-r--r-- | src/modem.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/src/modem.c b/src/modem.c index c335a387..e6fd1fe0 100644 --- a/src/modem.c +++ b/src/modem.c @@ -399,14 +399,20 @@ static int set_powered(struct ofono_modem *modem, ofono_bool_t powered) const struct ofono_modem_driver *driver = modem->driver; int err = -EINVAL; - if (driver == NULL) - return -EINVAL; - if (modem->powered_pending == powered) return -EALREADY; + /* Remove the atoms even if the driver is no longer available */ + if (powered == FALSE) { + remove_all_atoms(modem); + modem->call_ids = 0; + } + modem->powered_pending = powered; + if (driver == NULL) + return -EINVAL; + if (powered == TRUE) { if (driver->enable) err = driver->enable(modem); @@ -499,9 +505,6 @@ static DBusMessage *modem_set_property(DBusConnection *conn, if (powered) { if (modem->driver->pre_sim) modem->driver->pre_sim(modem); - } else { - remove_all_atoms(modem); - modem->call_ids = 0; } return NULL; @@ -562,9 +565,6 @@ void ofono_modem_set_powered(struct ofono_modem *modem, ofono_bool_t powered) if (powered) { if (modem->driver->pre_sim) modem->driver->pre_sim(modem); - } else { - remove_all_atoms(modem); - modem->call_ids = 0; } } |