Here is a backtrace I dumped with some home-built debug packages :

#0  0xb7c84996 in *__GI_raise (sig=6)
    at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#1  0xb7c86221 in *__GI_abort () at abort.c:88
#2  0xb7c7ddb0 in *__GI___assert_fail (assertion=0xb7b5322b "name", 
    file=0xb7b52a50 "entrygroup.c", line=424, 
    function=0xb7b52be0 "avahi_entry_group_add_service_strlst") at assert.c:78
#3  0xb7b4caa2 in avahi_entry_group_add_service_strlst (group=0x80dd5c8, 
    interface=-1, protocol=-1, flags=0, name=0x0, type=0x80dd398 "_ipp._tcp", 
    domain=0x80dbf58 "local", host=0x0, port=631, txt=0x80db7a8)
    at entrygroup.c:424
#4  0xb7e8ece5 in reg_create_service (sdref=0x80dd540) at compat.c:923
#5  0xb7e8f135 in reg_client_callback (s=0x80db878, 
    state=AVAHI_CLIENT_S_RUNNING, userdata=0x80dd540) at compat.c:996
#6  0xb7b4935d in client_set_state (client=0x80db878, 
    state=AVAHI_SERVER_RUNNING) at client.c:101
#7  0xb7b4ab41 in filter_func (bus=0x80d91d8, message=0x80e12f0, 
    userdata=0x80db878) at client.c:188
#8  0xb7ea2c22 in dbus_connection_dispatch () from /usr/lib/libdbus-1.so.3
#9  0xb7b520ec in dispatch_timeout_callback (t=0x80e17d8, userdata=0x0)
    at ../avahi-common/dbus-watch-glue.c:103
#10 0xb7b5c95a in timeout_callback (t=0x6) at simple-watch.c:449
#11 0xb7b5cc11 in avahi_simple_poll_dispatch (s=0x80d91d8)
    at simple-watch.c:562
#12 0xb7e90792 in DNSServiceProcessResult (sdref=0x80dd540) at compat.c:497
#13 0x08064678 in cupsdUpdateDNSSDBrowse (p=0x80cd7b0) at dirsvc.c:1364
#14 0x0808f06e in cupsdDoSelect (timeout=1) at select.c:455
#15 0x0806a660 in main (argc=2, argv=0xbf92eb74) at main.c:746


In fact, it is entirely an avahi problem :
reg_create_service calls avahi_entry_group_add_service_strlst with 
sdref->service_name_chosen as the 'name' argument. 
As sdref->service_name_chosen is null, assert(name) launches the abort of the 
program.

Before calling reg_create_service, reg_client_callback correctly checks
if the sdref->service_name_chosen pointer is null and corrects it, but
the check is in a conditional statement executed if the
sdref->service_name pointer is null (in this case it corrects it with a
pointer to the hostname of the client)

So a basic fix is to copy the check outside the conditional statement,
and to make the check correct 'service_name_chosen' with a pointer to a
copy of the value 'service_name'

After having testing my own fix (with success), I checked upstream, and in fact 
a similar fix has already been committed:
http://avahi.org/changeset/1536
http://avahi.org/ticket/154
and is officially available since version 0.6.22 (so in fact hardy should be 
immune to this bug, is it ? That would explain why Till do not succeed to 
trigger it/).

In fact as the fix was backported in Debian version 0.6.21-2, released
in unstable on September 9, so maybe with a little more luck, gutsy
could have avoided this bug by being inspired to backport it too ;)

-- 
CUPS fails to start on boot
https://bugs.launchpad.net/bugs/183652
You received this bug notification because you are a member of Ubuntu
Bugs, which is the bug contact for Ubuntu.

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to