On 2018/07/09 10:31, Bryan Vyhmeister wrote:
> On Mon, Jul 09, 2018 at 12:39:43PM +0100, Stuart Henderson wrote:
> > A backtrace from gdb would be a good start. Is there anything in dmesg at
> > the time of the crash?
>
> Nothing in dmesg. The output if I run in an xterm and also the backtrace
> are below. I should also mention that I am using cwm and not any desktop
> environment. Thank you.
>
> Bryan
>
>
>
> $ remmina
>
> ** (remmina:40021): CRITICAL **: 10:27:11.944:
> secret_service_load_collections_sync: assertion 'paths != NULL' failed
> [glibsecret] unable to get secret service: Unknown error.
> Plugin entry returned false:
> /usr/local/lib/remmina/plugins/remmina-plugin-secret.so.
> StatusNotifier/Appindicator support: not supported by desktop. Remmina will
> try to fallback to GtkStatusIcon/xembed
> WARNING: Remmina is running with a secret plugin, but it cannot connect to a
> secret service.
>
> (remmina:40021): Gtk-WARNING **: 10:27:12.108: gtk_menu_attach_to_widget():
> menu already attached to GtkMenuItem
> Gtk-Message: 10:27:16.253: GtkDialog mapped without a transient parent. This
> is discouraged.
> pthread_mutex_destroy on mutex with waiters!
> pthread_mutex_destroy on mutex with waiters!
> pthread_mutex_destroy on mutex with waiters!
> pthread_mutex_destroy on mutex with waiters!
> Abort trap (core dumped)
> $
>
>
>
> (gdb) bt
> #0 thrkill () at -:3
> #1 0x00001c9f16420e9e in _libc_abort () at
> /usr/src/lib/libc/stdlib/abort.c:51
> #2 0x00001c9f16439a56 in _rthread_mutex_timedlock (mutexp=Variable "mutexp"
> is not available.
> )
> at /usr/src/lib/libc/thread/rthread_mutex.c:118
> #3 0x00001c9ed6791f77 in onMainThread_schedule_callback_and_wait ()
> from /usr/local/lib/remmina/plugins/remmina-plugin-vnc.so
> #4 0x00001c9ed6791ddb in remmina_plugin_vnc_update_scale ()
> from /usr/local/lib/remmina/plugins/remmina-plugin-vnc.so
> #5 0x00001c9ed67907d9 in remmina_plugin_vnc_rfb_allocfb ()
> from /usr/local/lib/remmina/plugins/remmina-plugin-vnc.so
> #6 0x00001c9ec90eb972 in rfbInitClient () from
> /usr/local/lib/libvncclient.so.0.0
> #7 0x00001c9ed678f922 in remmina_plugin_vnc_main ()
> from /usr/local/lib/remmina/plugins/remmina-plugin-vnc.so
> #8 0x00001c9ed678f43b in remmina_plugin_vnc_main_thread ()
> from /usr/local/lib/remmina/plugins/remmina-plugin-vnc.so
> #9 0x00001c9f387cfbfe in _rthread_start (v=Variable "v" is not available.
> )
> at /usr/src/lib/librthread/rthread.c:96
> #10 0x00001c9f164810db in __tfork_thread ()
> at /usr/src/lib/libc/arch/amd64/sys/tfork_thread.S:75
> #11 0x0000000000000000 in ?? ()
> Current language: auto; currently asm
>
No idea about a fix but here are some more details,
The SIGABRT comes from the mutex checking that we have in librthread. The actual
line is here:
249 if (mutex->owner != self) {
250 _rthread_debug(5, "%p: different owner %p (%p)\n", self, (void
*)mutex,
251 (void *)mutex->owner);
252 if (mutex->type == PTHREAD_MUTEX_ERRORCHECK ||
253 mutex->type == PTHREAD_MUTEX_RECURSIVE) {
254 return (EPERM);
255 } else {
256 /*
257 * For mutex type NORMAL our undefined behavior for
258 * unlocking an unlocked mutex is to succeed without
259 * error. All other undefined behaviors are to
260 * abort() immediately.
261 */
262 if (mutex->owner == NULL &&
263 mutex->type == PTHREAD_MUTEX_NORMAL)
264 return (0);
265 else
266>>> abort();
267
268 }
269 }
I've tried forcgin the mutex to PTHREAD_MUTEX_NORMAL rather than the
default PTHREAD_MUTEX_STRICT_NP with the diff below but it still aborts,
the reason being that mutex->owner != NULL (and actually running with
RTHREAD_DEBUG=5 we see the "different owner" message).
Index: plugins/vnc/vnc_plugin.c
--- plugins/vnc/vnc_plugin.c.orig
+++ plugins/vnc/vnc_plugin.c
@@ -175,11 +175,15 @@ static void onMainThread_cleanup_handler( gpointer dat
static void onMainThread_schedule_callback_and_wait( struct
onMainThread_cb_data *d )
{
+ pthread_mutexattr_t mattr;
TRACE_CALL(__func__);
d->cancelled = FALSE;
pthread_cleanup_push( onMainThread_cleanup_handler, d );
- pthread_mutex_init( &d->mu, NULL );
- pthread_mutex_lock( &d->mu );
+ pthread_mutexattr_init(&mattr);
+ pthread_mutexattr_settype(&mattr, PTHREAD_MUTEX_NORMAL);
+ pthread_mutex_init( &d->mu, &mattr );
+ pthread_mutexattr_destroy(&mattr);
+ pthread_mutex_lock(&d->mu);
gdk_threads_add_idle( (GSourceFunc)onMainThread_cb, (gpointer)d );
pthread_mutex_lock( &d->mu );
Not sure where to go next but maybe this will save somebody else some time..