Hi Mika, On 10/28/2010 08:32 AM, mika.liljeb...@nokia.com wrote: > Hi Denis, > >> Patch has been applied, thanks. I did make a couple of minor tweaks >> afterwards. > > Thanks. A question regarding this particular tweak: > > diff --git a/src/radio-settings.c b/src/radio-settings.c > index cb0a598..eb2a42d 100644 > --- a/src/radio-settings.c > +++ b/src/radio-settings.c > @@ -126,8 +126,7 @@ static void radio_set_fast_dormancy(struct > ofono_radio_settings *rs, > const char *path = __ofono_atom_get_path(rs->atom); > dbus_bool_t value = enable; > > - if ((rs->flags & RADIO_SETTINGS_FLAG_CACHED) && > - rs->fast_dormancy == enable) > + if (rs->fast_dormancy == enable) > return; > > ofono_dbus_signal_property_changed(conn, path, > > The fundamental problem here is that there is only a single CACHED flag for > multiple properties, which may be modified individually. So, either you get > extra signals or you get too few. I checked the CACHED flag here because > otherwise the following might happen:
Yes, I know. But this problem is present in every single atom. oFono does not guarantee that every attribute is signaled when the atom is initialized. > > 1. client tries to GetProperties() and gets the "Operation already in > progress" error. > 2. client waits for PropertyChanged signal to get the FastDormancy value > 3. signal never comes because the default value happens to match the one > returned by the driver and the signal is suppressed > In general I think that for interfaces where this can happen, the likelihood is very low that it actually will in the real world. Do note that I have had the same argument with myself off and on for the past two years. So far this was never raised as an issue. If this ever becomes a problem, we can fix it properly using an appropriate idiom. > I do agree that sending extra signals is bad but I think that not sending a > signal is even worse. If the client cannot rely on getting a PropertyChanged > signal after a busy error, all it can do is resort to polling. I.e., every > client has to implement a polling pattern for GetProperties: > > while (GetProperties() == BUSY) > sleep(FOR_A_WHILE); > > Having a separate CACHED flag for each value would solve this optimally. > Failing that, I don't think a few extra signals is so bad. Forcing clients to > poll is just ugly. > Honestly, if you expect multiple applications to battle over the FastDormancy property, then it should be modeled differently. Perhaps with application registration and lifetime tracking over D-Bus, similar to how agents work. > Am I missing something? > > MikaL Regards, -Denis _______________________________________________ ofono mailing list ofono@ofono.org http://lists.ofono.org/listinfo/ofono