Package: libgtk2-unique-perl
Version: 0.05-2+b3
Severity: important

Dear Maintainer,

when trying to start a second instance of a program using Gtk2::Unique,
the first instance crashes. This happened for me when starting shutter,
but is also reproducible with a small perl script:

use Gtk2;
use Gtk2::Unique;

Gtk2->init;

my $app = Gtk2::UniqueApp->new(
    "org.example.Test", undef,
    test => 1
);

if ( $app->is_running ) {
    $app->send_message( 1, text => '' );
} else {
    $window = Gtk2::Window->new('toplevel');
    $app->watch_window($window);
    my $app_watch_id = $app->signal_connect(
        'message-received' => sub {}
    );

    $window->show;

    Gtk2->main;
    0;
}

Backtrace of the crash:

Program received signal SIGSEGV, Segmentation fault.
strlen () at ../sysdeps/x86_64/strlen.S:106
106     ../sysdeps/x86_64/strlen.S: No such file or directory.
(gdb) bt
#0  0x00007ffff7396486 in strlen () at ../sysdeps/x86_64/strlen.S:106
#1  0x000055555563df43 in Perl_newSVpv (my_perl=0x555555941010, 
s=s@entry=0x55eec6a0 <error: Cannot access memory at address 0x55eec6a0>, 
len=len@entry=0)
    at sv.c:9231
#2  0x00007fffef3d469a in perl_unique_app_marshall_message_received 
(closure=0x555555f43eb0, return_value=0x7fffffffd310, n_param_values=<optimized 
out>, param_values=0x7fffffffd370, invocant_hint=<optimized out>, 
marshal_data=<optimized out>) at xs/UniqueApp.xs:34
#6  0x00007ffff6c5bfaf in <emit signal ??? on instance 0x555555f23430 
[UniqueApp]> (instance=<optimized out>, signal_id=<optimized out>, 
detail=<optimized out>) at ././gobject/gsignal.c:3447
    #3  0x00007ffff6c40f75 in g_closure_invoke (closure=0x555555f43eb0, 
return_value=return_value@entry=0x7fffffffd310, n_param_values=4, 
param_values=param_values@entry=0x7fffffffd370, 
invocation_hint=invocation_hint@entry=0x7fffffffd2f0)
    at ././gobject/gclosure.c:804
    #4  0x00007ffff6c52f82 in signal_emit_unlocked_R 
(node=node@entry=0x555555f22af0, detail=detail@entry=0, 
instance=instance@entry=0x555555f23430, 
emission_return=emission_return@entry=0x7fffffffd4b0, 
instance_and_params=instance_and_params@entry=0x7fffffffd370) at 
././gobject/gsignal.c:3635
    #5  0x00007ffff6c5b66f in g_signal_emit_valist (instance=<optimized out>, 
signal_id=<optimized out>, detail=<optimized out>, 
var_args=var_args@entry=0x7fffffffd560) at ././gobject/gsignal.c:3401
#7  0x00007fffef1c9ac6 in unique_app_emit_message_received ()
---Type <return> to continue, or q <return> to quit---
   que-1.0.so.0
#8  0x00007fffef1ccd3d in  () at /usr/lib/libunique-1.0.so.0
#9  0x00007fffef1ccc06 in  () at /usr/lib/libunique-1.0.so.0
#10 0x00007fffeefa9f78 in  () at /usr/lib/x86_64-linux-gnu/libdbus-glib-1.so.2
#11 0x00007fffeed726a3 in  () at /lib/x86_64-linux-gnu/libdbus-1.so.3
#12 0x00007fffeed63d24 in dbus_connection_dispatch () at 
/lib/x86_64-linux-gnu/libdbus-1.so.3
#13 0x00007fffeefa7a25 in  () at /usr/lib/x86_64-linux-gnu/libdbus-glib-1.so.2
#14 0x00007ffff69677f7 in g_main_dispatch (context=0x555555b07b10) at 
././glib/gmain.c:3203
#15 0x00007ffff69677f7 in g_main_context_dispatch 
(context=context@entry=0x555555b07b10) at ././glib/gmain.c:3856
#16 0x00007ffff6967a60 in g_main_context_iterate (context=0x555555b07b10, 
block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>)
    at ././glib/gmain.c:3929
#17 0x00007ffff6967d82 in g_main_loop_run (loop=0x555555c4ec30) at 
././glib/gmain.c:4125
#18 0x00007ffff20cc447 in gtk_main () at 
/usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#19 0x00007ffff2686de5 in  () at 
/usr/lib/x86_64-linux-gnu/perl5/5.24/auto/Gtk2/Gtk2.so
#20 0x0000555555628070 in Perl_pp_entersub (my_perl=0x555555941010) at 
pp_hot.c:3987
#21 0x00005555556205d6 in Perl_runops_standard (my_perl=0x555555941010) at 
run.c:41
#22 0x00005555555a6699 in S_run_body (oldscope=1, my_perl=0x555555941010) at 
perl.c:2488
#23 0x00005555555a6699 in perl_run (my_perl=0x555555941010) at perl.c:2411
#24 0x000055555557f84d in main (argc=<optimized out>, argv=<optimized out>, 
env=<optimized out>) at perlmain.c:116
(gdb) quit

The crash does not happen anymore if you remove the signal_connect(...)
statement. In that case, the second instance exits as expected and the
first instance keeps running.

Thanks,
Alex

-- System Information:
Debian Release: 9.0
  APT prefers unstable-debug
  APT policy: (500, 'unstable-debug'), (500, 'unstable'), (500, 'testing'), (1, 
'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.8.0-2-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_US.utf8, LC_CTYPE=en_US.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages libgtk2-unique-perl depends on:
ii  libatk1.0-0                 2.22.0-1
ii  libc6                       2.24-9
ii  libcairo2                   1.14.8-1
ii  libfontconfig1              2.11.0-6.7
ii  libfreetype6                2.6.3-3+b1
ii  libgdk-pixbuf2.0-0          2.36.4-1
ii  libglib2.0-0                2.50.2-2
ii  libgtk2-perl                2:1.2499-1
ii  libgtk2.0-0                 2.24.31-1
ii  libpango-1.0-0              1.40.3-3
ii  libpangocairo-1.0-0         1.40.3-3
ii  libpangoft2-1.0-0           1.40.3-3
ii  libunique-1.0-0             1.1.6-5
ii  perl                        5.24.1-1
ii  perl-base [perlapi-5.24.1]  5.24.1-1

libgtk2-unique-perl recommends no packages.

libgtk2-unique-perl suggests no packages.

-- no debconf information

Reply via email to