[ekiga] Fixed bug #596185
- From: Julien Puydt <jpuydt src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ekiga] Fixed bug #596185
- Date: Sat, 24 Sep 2011 12:22:20 +0000 (UTC)
commit f355c3ef1ca10528092a271a5c423149570c9582
Author: Julien Puydt <jpuydt newton localdomain>
Date: Sat Sep 24 14:22:23 2011 +0200
Fixed bug #596185
Now we differentiate a little between the different bank events, and act accordingly
lib/engine/components/opal/sip-endpoint.cpp | 41 +++++++++++++++++++-------
lib/engine/components/opal/sip-endpoint.h | 6 ++--
2 files changed, 33 insertions(+), 14 deletions(-)
---
diff --git a/lib/engine/components/opal/sip-endpoint.cpp b/lib/engine/components/opal/sip-endpoint.cpp
index 620b7c5..f7975e8 100644
--- a/lib/engine/components/opal/sip-endpoint.cpp
+++ b/lib/engine/components/opal/sip-endpoint.cpp
@@ -1066,27 +1066,46 @@ Opal::Sip::EndPoint::update_bank ()
bank = core.get<Opal::Bank> ("opal-account-store");
if (boost::shared_ptr<Opal::Bank> bk = bank.lock ()) { // should always happen, but still
- bk->account_added.connect (boost::bind (&Opal::Sip::EndPoint::on_bank_updated, this, _1));
- bk->account_removed.connect (boost::bind (&Opal::Sip::EndPoint::on_bank_updated, this, _1));
- bk->account_updated.connect (boost::bind (&Opal::Sip::EndPoint::on_bank_updated, this, _1));
+ bk->account_added.connect (boost::bind (&Opal::Sip::EndPoint::account_added, this, _1));
+ bk->account_updated.connect (boost::bind (&Opal::Sip::EndPoint::account_updated_or_removed, this, _1));
+ bk->account_removed.connect (boost::bind (&Opal::Sip::EndPoint::account_updated_or_removed, this, _1));
+ account_updated_or_removed (Ekiga::AccountPtr ()/* unused*/);
}
}
void
-Opal::Sip::EndPoint::on_bank_updated (Ekiga::AccountPtr /*account*/)
+Opal::Sip::EndPoint::account_updated_or_removed (Ekiga::AccountPtr /*account*/)
{
- if (boost::shared_ptr<Opal::Bank> bk = bank.lock ())
- bk->visit_accounts (boost::bind (&Opal::Sip::EndPoint::visit_accounts, this, _1));
-}
+ /* we don't remember what the account information was, so we need
+ * to clear our current information everytime something changed
+ * (hopefully nobody has hundreds of opal accounts that get updated
+ * often, so performance shouldn't be an issue!
+ */
+
+ { // keep the mutex only to clear the accounts variable...
+ PWaitAndSignal m(aorMutex);
+ accounts.clear ();
+ }
+ { // ... because here we call something which will want that very same mutex!
+ bank = core.get<Opal::Bank> ("opal-account-store");
+ if (boost::shared_ptr<Opal::Bank> bk = bank.lock ()) { // should always happen, but still
+ bk->visit_accounts (boost::bind (&Opal::Sip::EndPoint::visit_account, this, _1));
+ }
+ }
+}
bool
-Opal::Sip::EndPoint::visit_accounts (Ekiga::AccountPtr account_)
+Opal::Sip::EndPoint::visit_account (Ekiga::AccountPtr _account)
{
- Opal::AccountPtr account = boost::dynamic_pointer_cast<Opal::Account> (account_);
+ account_added (_account);
+ return true;
+}
+void
+Opal::Sip::EndPoint::account_added (Ekiga::AccountPtr _account)
+{
+ Opal::AccountPtr account = boost::dynamic_pointer_cast<Opal::Account> (_account);
PWaitAndSignal m(aorMutex);
accounts[account->get_host ()] = account->get_aor ();
-
- return true;
}
diff --git a/lib/engine/components/opal/sip-endpoint.h b/lib/engine/components/opal/sip-endpoint.h
index 519f271..30eaf5d 100644
--- a/lib/engine/components/opal/sip-endpoint.h
+++ b/lib/engine/components/opal/sip-endpoint.h
@@ -181,9 +181,9 @@ namespace Opal {
std::string name);
void on_transfer (std::string uri);
- void on_bank_updated (Ekiga::AccountPtr account);
-
- bool visit_accounts (Ekiga::AccountPtr account);
+ void account_updated_or_removed (Ekiga::AccountPtr account);
+ bool visit_account (Ekiga::AccountPtr account);
+ void account_added (Ekiga::AccountPtr account);
void registration_event_in_main (const std::string aor,
Account::RegistrationState state,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]