Asterisk fällt immer mal wieder aus

robtor

Neuer User
Mitglied seit
18 Apr 2005
Beiträge
108
Punkte für Reaktionen
0
Punkte
0
Hallo,

habe mit gdb mir das core mal angeguckt und das bekommen
kann mir jemand sagen was da jetzt der fehler ist und warum asterisk immer mal wieder ausfehlt?

habe mit gdb asterisk core.XXX das file geöffnet und dann mit bt gelesen

... und das kam raus

noch zur Erklährung, der Asterisk ist ein FREEPBX und es sind z.Z. ca 250 Telefon dran angemeldet. Als Gateway haben wir ein Patton mit einer E1 Karte!

danke schon mal für die Hilfe!!!

Code:
#0  0x00b53b3a in strcmp () from /lib/libc.so.6
#1  0x080c2079 in pbx_find_extension (chan=0x0, bypass=0x0, q=0xb7f42b28,
    context=0x6f430a0d <Address 0x6f430a0d out of bounds>,
    exten=0x30386539 <Address 0x30386539 out of bounds>, priority=-1,
    label=0x0, callerid=0x8121404 "", action=E_MATCH) at pbx.c:968
#2  0x080c223b in ast_get_hint (hint=0xb7f451b6 "SIP/1559", hintsize=80,
    name=0x0, namesize=0, c=0x0,
    context=0x6f430a0d <Address 0x6f430a0d out of bounds>,
    exten=0x30386539 <Address 0x30386539 out of bounds>) at pbx.c:1881
#3  0x039f9af5 in transmit_state_notify (p=0x9dd85f8, state=1, full=1,
    timeout=0, cid_num=0x3a20df2 "unknown", cid_name=0x3a20df2 "unknown")
    at chan_sip.c:6937
#4  0x039fad17 in cb_extensionstate (context=0x9c99474 "ext-local",
    exten=0x9ca7318 "1559", state=1, data=0x9dd85f8, cid_num=0xa38041c "",
    cid_name=0xa38046c "") at chan_sip.c:8254
#5  0x080bdb65 in ast_hint_state_changed (device=0xa3804bc "SIP/1559",
    cid_num=0xa38041c "", cid_name=0xa38046c "") at pbx.c:2031
#6  0x08091479 in do_state_change (device=0xa3804bc "SIP/1559",
    cid_num=0xa38041c "", cid_name=0xa38046c "") at devicestate.c:301
#7  0x08091522 in do_devstate_changes (data=0x0) at devicestate.c:390
#8  0x080f260b in dummy_start (data=0x9babf78) at utils.c:545
#9  0x00c6073b in start_thread () from /lib/libpthread.so.0
#10 0x00bb5cfe in clone () from /lib/libc.so.6
(gdb)
 
Zuletzt bearbeitet:
Da scheint es von transmit_state_notify() zu ast_get_hint() was schief zu
laufen. Es werden ungueltige Adressen uebergeben und in strcmp() knallt
es deswegen dann.
Geh den stack halt mal mit 'up' im gdb hoch und dann sollte man sehen,
wer wann welche Uebergabe verhunzt.
 
Geh den stack halt mal mit 'up' im gdb hoch und dann sollte man sehen

... wie mache ich das? ich habe von gdb keine Ahnung!

kannst du mir da noch mal helfen?


Danke
 
einfach hinter (gdb) "up" eintippen. ohne " natuerlich.
jedes "up" eine stufe hoeher im stack.. ausprobieren tut nicht weh :)
 
dann bekomme ich das

Code:
#1  0x080c2079 in pbx_find_extension (chan=0x0, bypass=0x0, q=0xb7f42b28,
    context=0x6f430a0d <Address 0x6f430a0d out of bounds>,
    exten=0x30386539 <Address 0x30386539 out of bounds>, priority=-1,
    label=0x0, callerid=0x8121404 "", action=E_MATCH) at pbx.c:968
968                             if (!strcmp(tmp->name, context))
(gdb) up
#2  0x080c223b in ast_get_hint (hint=0xb7f451b6 "SIP/1559", hintsize=80,
    name=0x0, namesize=0, c=0x0,
    context=0x6f430a0d <Address 0x6f430a0d out of bounds>,
    exten=0x30386539 <Address 0x30386539 out of bounds>) at pbx.c:1881
1881            e = pbx_find_extension(c, NULL, &q, context, exten, PRIORITY_HINT, NULL, "", E_MATCH);
(gdb) up
#3  0x039f9af5 in transmit_state_notify (p=0x9dd85f8, state=1, full=1,
    timeout=0, cid_num=0x3a20df2 "unknown", cid_name=0x3a20df2 "unknown")
    at chan_sip.c:6937
6937            if (ast_get_hint(hint, sizeof(hint), NULL, 0, NULL, p->context, p->exten)) {
(gdb) up
#4  0x039fad17 in cb_extensionstate (context=0x9c99474 "ext-local",
    exten=0x9ca7318 "1559", state=1, data=0x9dd85f8, cid_num=0xa38041c "",
    cid_name=0xa38046c "") at chan_sip.c:8254
8254                    transmit_state_notify(p, state, 1, FALSE, cid_num, cid_name);
(gdb) up
#5  0x080bdb65 in ast_hint_state_changed (device=0xa3804bc "SIP/1559",
    cid_num=0xa38041c "", cid_name=0xa38046c "") at pbx.c:2031
2031                            cblist->callback(hint->exten->parent->name, hint->exten->exten, state, cblist->data, cid_num, cid_name);
(gdb) up
#6  0x08091479 in do_state_change (device=0xa3804bc "SIP/1559",
    cid_num=0xa38041c "", cid_name=0xa38046c "") at devicestate.c:301
301             ast_hint_state_changed(device, cid_num, cid_name);
(gdb) up
#7  0x08091522 in do_devstate_changes (data=0x0) at devicestate.c:390
390                             do_state_change(cur->device, cur->cid_num, cur->cid_name);
(gdb) up
#8  0x080f260b in dummy_start (data=0x9babf78) at utils.c:545
545             ret = a.start_routine(a.data);
(gdb) up
#9  0x00c6073b in start_thread () from /lib/libpthread.so.0
(gdb) up
#10 0x00bb5cfe in clone () from /lib/libc.so.6
(gdb) up
Initial frame selected; you cannot go up.
(gdb)
Edit Guard-X: Bitte Code-Tags verwenden!

... hilft mir aber auch nicht gerade weiter.

ich habe mal gehört das asterisk bei vielen hints probleme bekommt.

Ich habe hier jetzt 263 hints, wenn ich show hints eingebe.
Kann es daran liegen?
 
Hmja, koennte sein, dass zumindest ast_get_hint mit so "grossen" (>256)
Zahlen nicht zurecht kommt. Waer ja nicht der erste Codingfehler in so einer
Ecke (allg. gesprochen).

Nachdem ich mich aber in der Codebase nicht tummele..
developers-liste oder so mal probieren? Klemmt auf jeden Fall im Code selber.
 
Die Zeiger auf tmp->name, context sind ungültig -> Segmentverletzung beim Zugriff von strcmp()

Im digium bugtracker melden,
https://issues.asterisk.org/main_page.php
müsste schon ein Bug eingetragen sein und auch ein fix vorhanden sein,

kommt mir bekannt vor, Ekiga hat CW hier beim SUBSCRIBE öfters abgeschossen.
 
Zuletzt bearbeitet:

Anhänge

  • backtrace.txt
    6.5 KB · Aufrufe: 3
Schreib paar Schritte dazu wie man den Fehler reproduzieren kann sonst macht er den Bug zu.
1. Register 1...250 SIP-devices as users with subsequent SUBSCRIBEs, hints enabled.
2. Asterisk segfaults with coredump intermittently.
 
Zuletzt bearbeitet:
Nur mal so nebenbei: Welche Anzahl steht in der letzten Zeile von "sip show subscriptions"?
 
da steht 225 activ sip subscriptions
 
This is definitely going to be a tough issue to reproduce in the lab because my desktop is not big enough for 250 phones ;)

hehe :D

Immerhin ist der Bug nun acknowledged.
 
Ich bräuchte nochmal die Settings von einem beliebigen snom Telefon, welches an diesem Server hängt.
 
Sehr interessanter Bug!

Ich hab mich mal etwas durch den Quelltext gewühlt und mehrere Ansätze gefunden, welche das beschriebene Verhalten auslösen könnten.

Hast du evtl. Realtime laufen?

Interessant wären noch die letzten Debug Meldungen (verbosity > 2 evtl. auch ausreichend), bevor der Asterisk abschmiert.
 
Zuletzt bearbeitet:
Hier mal die Einstellungen von einem der SNOM 360!
 

Anhänge

  • snom.txt
    35 KB · Aufrufe: 8
hier mal ein backtrace von einem crash vor wenigen Minuten!

vll kann jemand was erkennen!
 

Anhänge

  • backtrace_2010_05_04.txt
    13.8 KB · Aufrufe: 7
Ein anderer Bug oder Speicherkorruption durch inkonsistente Bibliotheken nach fehlerhaften build, die .so s passen nicht zur main executable.
Falls Trixbox Projekt nen Bugzilla hat, dort melden.

Asterisk: Trixbox 2.2.0 mit Aenderungen

Was heisst Änderungen? Sind die letzten Patches zur aktuellen Trixbox drin?
2.2.0 ist ja völlig veraltet:
http://www.trixbox.org/downloads

Falls der * selber gebaut ist, make distclean und mit nem debian stable compiler neubauen.
Bei Hochleistungssystemen ist die Optimierung wichtig gcc -O2 -g -m...
der Trixbox 2.2.0 build ist womöglich nicht für large scale Anlagen stabil gebaut.
Ein nichtoptimierter build kann unter solchen Lasten abstürzen.
 
Zuletzt bearbeitet:
Das system ist Trixbox 2.6.2.3

und die Änderung ist, das ich den Asterisk neu Compeliert habe Asterisk 1.4.4 mit dem Pickup Patch.
 
Asterisk 1.4.4??? Bei Digium steht 1.4.30!

Gibts einen bestimmten Grund für einen so extrem alten Asterisk? Falls wirklich 1.4.4 im Einsatz ist, würde ich in jedem Fall auf eine aktuelle Version aktualisieren.

Ich sag es hiermit nochmal: Schön wäre ein Debug Log vor dem Absturz inkl. weiterem BT.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.