Re: [Ekiga-list] Status of Win port



Am Montag, den 13.04.2009, 09:27 +0200 schrieb Eugen Dedu:
> Michael Cronenworth wrote:
> > Eugen Dedu wrote:
> >>
> >> "VFW support is still not visible even though ptlib is built with VFW 
> >> enabled." - I suppose this is still true...
> >>
> >> Fails to register: Could you send us a -d 4 output?  (I haven't seen 
> >> any, sorry)
> >>
> > 
> > Here's the -d4 output. I've also attached a "vfw" log in that I clicked 
> 
> You have the same problem as Michael R.: STUN is not enabled and ekiga 
> tries to register through a private address, so you receive an error.
> 
> Let me think why STUN is not enabled in windows...
> 
> > "Detect Devices" and the log shows what PTLib thinks of my system. You 
> > can see "PTLIB/VideoForWindows" being output.
> 
> I do not know this kind of things.  Snark, could you help here?
> 
Currently, the STUN related sequence of events during win32 startup is:
1) notifiers from the config file are added (gmconf-glib.c)
2) notifiers are called via g_idle_add (gmconf-glib.c) including
disable_stun false
3) Opal::CallManager::start (opal-call-manager.cpp) finds stun_enabled
false and does not start the StunDetector.
4) ConfBridge::on_property_changed (opal-gmconf-bridge.cpp) calls
manager.set_stun_enabled to set stun_enabled.
I have attached a gdb log which shows this. It appears that enabling
stun comes to late for the CallManager which gives us only a single
chance for stun detection. The delay is probably caused by the glib idle
loop. I just found that taking out all the idle stuff from gmconf-glib.c
(see attached patch) lets me connect to ekiga.net. However, I do not
know the reason, why the notification was pushed in to the idle loop
originally.
Regards
Michael
b opal-call-manager.cpp:157		if (stun_enabled ...
b opal-gmconf-bridge.cpp:176	manager.set_stun_enabled ...
b gm_conf_notifier_add			gmconf-glibc.c
b entry_call_notifiers			gmconf-glibc.c

(gdb) Breakpoint 1 at 0x48e678: file ../../../../lib/engine/components/opal/opal-call-manager.cpp, line 157.
(gdb) Breakpoint 2 at 0x499889: file ../../../../lib/engine/components/opal/opal-gmconf-bridge.cpp, line 176.
(gdb) Breakpoint 3 at 0x4257bc: file gmconf-glib.c, line 1326.
(gdb) Breakpoint 4 at 0x42443a: file gmconf-glib.c, line 719.
(gdb) Starting program: c:\programme\ekiga/ekiga.exe 
[New thread 3708.0x848]
[New thread 3708.0xbc8]
[New thread 3708.0xea0]
[New thread 3708.0xda0]

Breakpoint 3, gm_conf_notifier_add (
    namespac=0xa62ec4 "/apps/ekiga/general/personal_data/full_name", 
    func=0x48392a <display_name_changed_nt(void*, _GmConfEntry*, void*)>, 
    user_data=0x86fd770) at gmconf-glib.c:1326
1326	gmconf-glib.c: No such file or directory.
	in gmconf-glib.c
Current language:  auto; currently c
(gdb) Deleted breakpoint 3 
(gdb) Continuing.
[New thread 3708.0xf74]
[New thread 3708.0xcf8]
[New thread 3708.0xb44]
[New thread 3708.0xb00]
[New thread 3708.0x7cc]

Breakpoint 4, entry_call_notifiers (entry=0x86b51f8) at gmconf-glib.c:719
719	in gmconf-glib.c
(gdb) Deleted breakpoint 4 
(gdb) Continuing.

Breakpoint 1, Opal::CallManager::start (this=0x86ff848)
    at ../../../../lib/engine/components/opal/opal-call-manager.cpp:157
157	../../../../lib/engine/components/opal/opal-call-manager.cpp: No such file or directory.
	in ../../../../lib/engine/components/opal/opal-call-manager.cpp
Current language:  auto; currently c++
(gdb) Continuing.
[New thread 3708.0xc9c]
[New thread 3708.0xc4]

Breakpoint 2, Opal::ConfBridge::on_property_changed (this=0x8719a00, 
    key=0x23fb80, entry=0x86b5758)
    at ../../../../lib/engine/components/opal/opal-gmconf-bridge.cpp:176
176	../../../../lib/engine/components/opal/opal-gmconf-bridge.cpp: No such file or directory.
	in ../../../../lib/engine/components/opal/opal-gmconf-bridge.cpp
(gdb) Continuing.
[New thread 3708.0x294]

Program received signal SIGSEGV, Segmentation fault.
0xfeeefeee in ?? ()

diff -ur ekiga.orig/lib/gmconf/gmconf-glib.c ekiga/lib/gmconf/gmconf-glib.c
--- ekiga.orig/lib/gmconf/gmconf-glib.c	2009-04-12 12:42:26.581059164 +0200
+++ ekiga/lib/gmconf/gmconf-glib.c	2009-04-12 13:03:14.624525000 +0200
@@ -215,7 +215,6 @@
 
 static void entry_set_redirect (GmConfEntry *, GmConfEntry *);
 
-static gboolean entry_call_notifiers_from_g_idle (gpointer);
 static void entry_call_notifiers (const GmConfEntry *);
 static gpointer entry_add_notifier (GmConfEntry *, GmConfNotifier, gpointer);
 static void entry_remove_notifier (GmConfEntry *, gpointer);
@@ -527,8 +526,6 @@
 
   g_return_if_fail (ent != NULL);
 
-  (void)g_idle_remove_by_data (ent);
-
   entry = (GmConfEntry *)ent;
 
   g_free (entry->key);
@@ -693,16 +690,14 @@
   entry->value.redirect = redirect;
 }
 
-static gboolean
-entry_call_notifiers_from_g_idle (gpointer data)
+static void
+entry_call_notifiers (const GmConfEntry *entry)
 {
-  GmConfEntry *entry = NULL;
   GSList *ptr = NULL;
   Notifier *notif = NULL;
 
-  /* no check on data: done in entry_call_notifiers */
+  g_return_if_fail (entry != NULL);
 
-  entry = (GmConfEntry *)data;
   for (ptr = entry->notifiers; ptr != NULL; ptr = ptr->next) {
     notif = (Notifier *)ptr->data;
     if (entry->type == GM_CONF_OTHER && entry->value.redirect != NULL)
@@ -710,16 +705,6 @@
     else
       notifier_call_on_entry (notif, entry);
   }
-  return FALSE;
-}
-
-static void
-entry_call_notifiers (const GmConfEntry *entry)
-{
-  g_return_if_fail (entry != NULL);
-
-  if (entry->notifiers != NULL)
-    g_idle_add (entry_call_notifiers_from_g_idle, (gpointer)entry);
 }
 
 static gpointer


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]