From: Denis Kenzior Date: Wed, 2 Dec 2009 21:33:25 +0000 (-0600) Subject: Fix: Remove all atoms when attempting to power off X-Git-Tag: 0.13~38 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dac0ccc8a8696bbf0f8db26218fa5d9ff7304d4f;p=platform%2Fupstream%2Fofono.git 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. --- diff --git a/src/modem.c b/src/modem.c index c335a38..e6fd1fe 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; } }