--- Begin Message ---
Package: pidgin-skype
Version: 20130613+svn660+dfsg-1
Severity: grave
Tags: patch
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Hi!
Since some time, pidgin-skype is unable to establish communication
with Skype and crashes when it tries to. This is 100% reproducible on
my setup. This bug seems to be already reported upstream:
https://code.google.com/p/skype4pidgin/issues/detail?id=239
Here is a backtrace:
#0 0x00007ffff4764077 in __GI_raise (sig=sig@entry=6) at
../nptl/sysdeps/unix/sysv/linux/raise.c:56
resultvar = 0
pid = 28522
selftid = 28522
#1 0x00007ffff4765458 in __GI_abort () at abort.c:89
save_stage = 2
act = {
__sigaction_handler = {
sa_handler = 0x55555622f2b0,
sa_sigaction = 0x55555622f2b0
},
sa_mask = {
__val = {140737307444736, 93825003648256, 140737351949831, 5, 0,
44, 140737294589224, 0, 93825003648256, 93825000110608, 140737351975717, 44,
140737295450653, 44, 140737308113920, 0}
},
sa_flags = -189974640,
sa_restorer = 0x7ffff541bce0
}
sigs = {
__val = {32, 0 <repeats 15 times>}
}
#2 0x00007ffff53bb95d in g_mutex_unlock_slowpath (mutex=<optimized out>,
prev=<optimized out>) at
/build/glib2.0-Dv_k6u/glib2.0-2.42.0/./glib/gthread-posix.c:1327
No locals.
#3 0x00007ffff53bc38e in g_mutex_unlock (mutex=<optimized out>) at
/build/glib2.0-Dv_k6u/glib2.0-2.42.0/./glib/gthread-posix.c:1350
prev = <optimized out>
#4 0x00007ffff53bc5ce in g_cond_wait_until (cond=0x555556037500,
mutex=0x555555cd7a10, end_time=<optimized out>) at
/build/glib2.0-Dv_k6u/glib2.0-2.42.0/./glib/gthread-posix.c:1442
now = {
tv_sec = 273990,
tv_nsec = 37210622
}
span = {
tv_sec = 9,
tv_nsec = 999985378
}
sampled = 0
res = <optimized out>
#5 0x00007ffff534a8ca in g_cond_timed_wait (cond=<optimized out>,
mutex=<optimized out>, abs_time=abs_time@entry=0x7fffffffbfa0) at
/build/glib2.0-Dv_k6u/glib2.0-2.42.0/./glib/deprecated/gthread-deprecated.c:1578
end_time = <optimized out>
#6 0x00007fffe5207fbc in skype_send_message
(message_format=message_format@entry=0x7fffe520fc7c "NAME %s") at
skype_messaging.c:235
next_message_num = 1
cur_message_num = 0
message = 0x5555561cc3e0 "\340\304\034VUU"
return_msg = <optimized out>
args = {{
gp_offset = 8,
fp_offset = 48,
overflow_arg_area = 0x7fffffffc090,
reg_save_area = 0x7fffffffbfd0
}}
condition_result = <optimized out>
endtime = {
tv_sec = 1411799860,
tv_usec = 220479
}
#7 0x00007fffe5209efd in skype_login_part2 (acct=0x555555e2dbd0,
acct@entry=<error reading variable: value has been optimized out>) at
libskype.c:1747
reply = <optimized out>
gc = 0x5555561765e0
missedmessagestimout = 0
#8 0x00007ffff5378613 in g_timeout_dispatch (source=0x55555622f2b0,
callback=<optimized out>, user_data=<optimized out>) at
/build/glib2.0-Dv_k6u/glib2.0-2.42.0/./glib/gmain.c:4520
timeout_source = 0x55555622f2b0
again = <optimized out>
#9 0x00007ffff5377b6d in g_main_dispatch (context=0x55555586ccf0) at
/build/glib2.0-Dv_k6u/glib2.0-2.42.0/./glib/gmain.c:3111
dispatch = 0x7ffff5378600 <g_timeout_dispatch>
prev_source = 0x0
was_in_call = 0
user_data = 0x555555e2dbd0
callback = 0x7fffe5209eb0 <skype_login_part2>
cb_funcs = <optimized out>
cb_data = 0x5555561cc7d0
need_destroy = <optimized out>
source = 0x55555622f2b0
current = 0x555556063fc0
i = 12
#10 g_main_context_dispatch (context=context@entry=0x55555586ccf0) at
/build/glib2.0-Dv_k6u/glib2.0-2.42.0/./glib/gmain.c:3710
No locals.
#11 0x00007ffff5377f48 in g_main_context_iterate (context=0x55555586ccf0,
block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at
/build/glib2.0-Dv_k6u/glib2.0-2.42.0/./glib/gmain.c:3781
max_priority = 0
timeout = 0
some_ready = 1
nfds = <optimized out>
allocated_nfds = 8
fds = 0x555555d551e0
#12 0x00007ffff5378272 in g_main_loop_run (loop=0x5555561b9360) at
/build/glib2.0-Dv_k6u/glib2.0-2.42.0/./glib/gmain.c:3975
__FUNCTION__ = "g_main_loop_run"
#13 0x00007ffff6615bc7 in gtk_main () from
/usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
No symbol table info available.
#14 0x000055555558f0d1 in main (argc=1, argv=0x7fffffffe6c8) at
/build/pidgin-lGhYHj/pidgin-2.10.9/./pidgin/gtkmain.c:933
opt_help = -15680
opt_version = 1439729824
opt_config_dir_arg = 0x0
accounts = 0x0
sigset = {
__val = {82950, 0 <repeats 15 times>}
}
errmsg = '\000' <repeats 760 times>...
signal_channel = 0x0
signal_status = G_IO_STATUS_ERROR
error = 0x0
opt = 0
debug_enabled = 80
active_accounts = 0x0
st = {
st_dev = 0,
st_ino = 0,
st_nlink = 0,
st_mode = 0,
st_uid = 0,
st_gid = 0,
__pad0 = 0,
st_rdev = 0,
st_size = 0,
st_blksize = 0,
st_blocks = 0,
st_atim = {
tv_sec = 0,
tv_nsec = 0
},
st_mtim = {
tv_sec = 0,
tv_nsec = 0
},
st_ctim = {
tv_sec = 0,
tv_nsec = 0
},
__glibc_reserved = {0, 0, 0}
}
long_options = {{
name = 0x55555562bb03 "config",
has_arg = 1,
flag = 0x0,
val = 99
}, {
name = 0x55555561a139 "debug",
has_arg = 0,
flag = 0x0,
val = 100
}, {
name = 0x555555627b24 "force-online",
has_arg = 0,
flag = 0x0,
val = 102
}, {
name = 0x55555561bcba "help",
has_arg = 0,
flag = 0x0,
val = 104
}, {
name = 0x5555556279ed "login",
has_arg = 2,
flag = 0x0,
val = 108
}, {
name = 0x555555627b31 "multiple",
has_arg = 0,
flag = 0x0,
val = 109
}, {
name = 0x555555627b3a "nologin",
has_arg = 0,
flag = 0x0,
val = 110
}, {
name = 0x55555562bb16 "session",
has_arg = 1,
flag = 0x0,
val = 115
}, {
name = 0x55555561e57a "version",
has_arg = 0,
flag = 0x0,
val = 118
}, {
name = 0x55555562bb0c "display",
has_arg = 1,
flag = 0x0,
val = 68
}, {
name = 0x5555556286d3 "sync",
has_arg = 0,
flag = 0x0,
val = 83
}, {
name = 0x0,
has_arg = 0,
flag = 0x0,
val = 0
}}
I have the following threads running during the crash:
(gdb) thread
[Current thread is 1 (Thread 0x7ffff7f9e9c0 (LWP 28522))]
(gdb) info threads
Id Target Id Frame
3 Thread 0x7fffcbfff700 (LWP 28537) "pidgin" syscall () at
../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
2 Thread 0x7fffd1092700 (LWP 28533) "pidgin" 0x00007ffff47e64ad in
nanosleep () at ../sysdeps/unix/syscall-template.S:81
* 1 Thread 0x7ffff7f9e9c0 (LWP 28522) "pidgin" 0x00007ffff4764077 in
__GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
(gdb) thread 2
[Switching to thread 2 (Thread 0x7fffd1092700 (LWP 28533))]
#0 0x00007ffff47e64ad in nanosleep () at ../sysdeps/unix/syscall-template.S:81
81 ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb) bt
#0 0x00007ffff47e64ad in nanosleep () at ../sysdeps/unix/syscall-template.S:81
#1 0x00007ffff480e5b4 in usleep (useconds=useconds@entry=1000) at
../sysdeps/unix/sysv/linux/usleep.c:32
#2 0x00007fffe520680d in receive_message_loop () at skype_messaging_x11.c:235
#3 0x00007ffff539e925 in g_thread_proxy (data=0x5555561bc720) at
/build/glib2.0-Dv_k6u/glib2.0-2.42.0/./glib/gthread.c:764
#4 0x00007ffff4adf0a4 in start_thread (arg=0x7fffd1092700) at
pthread_create.c:309
#5 0x00007ffff4814c2d in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:111
(gdb) bt
#0 syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1 0x00007ffff53bc4cc in g_cond_wait (cond=cond@entry=0x5555561cc578,
mutex=mutex@entry=0x5555561cc570) at
/build/glib2.0-Dv_k6u/glib2.0-2.42.0/./glib/gthread-posix.c:1396
#2 0x00007ffff534caab in g_async_queue_pop_intern_unlocked
(queue=queue@entry=0x5555561cc570, wait=wait@entry=1,
end_time=end_time@entry=-1) at
/build/glib2.0-Dv_k6u/glib2.0-2.42.0/./glib/gasyncqueue.c:419
#3 0x00007ffff534cf17 in g_async_queue_pop (queue=0x5555561cc570) at
/build/glib2.0-Dv_k6u/glib2.0-2.42.0/./glib/gasyncqueue.c:453
#4 0x00007fffe5205d7c in send_messages_thread_func (data=<optimized out>) at
skype_messaging.c:139
#5 0x00007ffff539e925 in g_thread_proxy (data=0x5555561bc770) at
/build/glib2.0-Dv_k6u/glib2.0-2.42.0/./glib/gthread.c:764
#6 0x00007ffff4adf0a4 in start_thread (arg=0x7fffcbfff700) at
pthread_create.c:309
#7 0x00007ffff4814c2d in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:111
The documentation of g_cond_timed_wait() says:
* g_cond_timed_wait:
* @cond: a #GCond
* @mutex: a #GMutex that is currently locked
* @abs_time: a #GTimeVal, determining the final time
But in the source code, the mutex is not locked. By locking the mutex,
the crash is fixed for me. Attached is the patch.
- -- System Information:
Debian Release: jessie/sid
APT prefers unstable
APT policy: (500, 'unstable'), (101, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 3.16-1-amd64 (SMP w/4 CPU cores)
Locale: LANG=fr_FR.utf8, LC_CTYPE=fr_FR.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages pidgin-skype depends on:
ii libpurple0 2.10.9-1+b1
ii pidgin-skype-common 20130613+svn660+dfsg-1
pidgin-skype recommends no packages.
pidgin-skype suggests no packages.
- -- no debconf information
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQIcBAEBCAAGBQJUJmFvAAoJEJWkL+g1NSX55JQP/2/4ab4hxxhcJTD/KOjzzc9e
E8tWv2QiD520BvgLyd+eaA9XF1WRSX3OsowaqVlWbgu/Qtj6oDJt+Ji7Cqcg3A6w
gmBtwmISqpMUY5isTbqBFY8kcrHA54bG0AH3FNM64709ZXTQsu2nX5rQz+fScZXS
6m38LnwL+M/4urkIuER+j6+yAl3kcPsQxAgoyKV0KsoRFltTunWOr7P8E9o4wxAL
zO8vcS1yWagD0wTr1nZPIiq6rowJP1ULivWPgRaOGAcrVcVmyh5a3HZB2rckkIcM
uy6pjUB6WrhkJNtWRpYP006sXiKM3h4xtdclDv0a325YW8c+Hyf/IvPJdnl5ShFm
A/bKzqVPF2312iwvU3xUgLeBWVqJfCbqqG+iQkgUxO62vCFZBcRAbhMNFhWCBExi
mWPji9Gj/Du5LXNYeUkcDa1hxLi5s2Gz3Zj1D1DjX2UQP2Mq6VH6eRgBoMNZY4Mq
rkcLj24jSZ38XEDPihquG7HXwFTFqEbNmsfqVJdXMt6TkoW3140SWkbtfGG9aGBp
XnF2Ml3cSUF35w+2cvr0MqLkS9OL8W8jwTf/mCpTEFHX5cARj6mxECYLzuy22KHl
kW1+ZGynyAPIQQaELEeY7/7ZCBZbzxvAan9HCOt5752FQ9+iHgtqkXtk7tZI/QyA
D4MoHbsWr1+QQFwwlzFs
=queD
-----END PGP SIGNATURE-----
Index: pidgin-skype-20130613+svn660+dfsg/skype_messaging.c
===================================================================
--- pidgin-skype-20130613+svn660+dfsg.orig/skype_messaging.c
+++ pidgin-skype-20130613+svn660+dfsg/skype_messaging.c
@@ -232,11 +232,9 @@ char *skype_send_message(char *message_f
//wait for message for a maximum of 10 seconds
g_get_current_time(&endtime);
g_time_val_add(&endtime, 10 * G_USEC_PER_SEC);
+ g_static_mutex_lock2(&mutex);
condition_result = g_cond_timed_wait(condition, g_static_mutex_get_mutex2(&mutex), &endtime);
-
- //g_cond_timed_wait already locks this mutex
- //g_static_mutex_lock2(&mutex);
-
+
if(!condition_result)
#endif
#endif
--- End Message ---