From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Stefan Israelsson Tampe Newsgroups: gmane.lisp.guile.devel Subject: Does guile mutexes work in C Date: Sun, 27 Apr 2014 21:22:46 +0200 Message-ID: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/alternative; boundary=e89a8ffbad19adcdda04f80b1f1d X-Trace: ger.gmane.org 1398626582 17687 80.91.229.3 (27 Apr 2014 19:23:02 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sun, 27 Apr 2014 19:23:02 +0000 (UTC) To: guile-devel Original-X-From: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Sun Apr 27 21:22:55 2014 Return-path: Envelope-to: guile-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1WeUf8-0000dt-Nz for guile-devel@m.gmane.org; Sun, 27 Apr 2014 21:22:54 +0200 Original-Received: from localhost ([::1]:40347 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WeUf8-0006a6-BQ for guile-devel@m.gmane.org; Sun, 27 Apr 2014 15:22:54 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:40394) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WeUf3-0006a0-S7 for guile-devel@gnu.org; Sun, 27 Apr 2014 15:22:50 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WeUf2-0003in-RD for guile-devel@gnu.org; Sun, 27 Apr 2014 15:22:49 -0400 Original-Received: from mail-pb0-x230.google.com ([2607:f8b0:400e:c01::230]:42946) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WeUf2-0003iZ-G1 for guile-devel@gnu.org; Sun, 27 Apr 2014 15:22:48 -0400 Original-Received: by mail-pb0-f48.google.com with SMTP id md12so5038207pbc.35 for ; Sun, 27 Apr 2014 12:22:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=ZN0cdd+6L4RWvArfFc9yqkYdpSEHHLWWs9zubaA3VBE=; b=lc6mYDw0o+zVAXdCNXRs0nJXUeiqaIvr7dAj7J2w0ArIO7WfvSYXwPWRZrSlh+L/RY EeervDIDgCP03ET/aIemH5njmeT0leew6IVnpKgB5f2X3KjlV2fXvXUz/jI7/QAthgFn jA9YCeWoStOVOwBp6lWsATSfMNC4xu0ENdFHBOB1sg9QA3zDV05JN6yxKcgAHeUiwIe7 x4DGAISAlgYSEtccHtA6T1c11c7Vpabwz+kyX+RcrxDA8hgLlCePAkoE8wCmCJ+iPVIp g2oU4nR+ZNsGN4kgJo5TTETdLb/LQ6t3UtPrxwiwJcYVQRUmYcoqQgvO988bccCUE5PP khfw== X-Received: by 10.66.119.239 with SMTP id kx15mr21073644pab.51.1398626566557; Sun, 27 Apr 2014 12:22:46 -0700 (PDT) Original-Received: by 10.70.106.133 with HTTP; Sun, 27 Apr 2014 12:22:46 -0700 (PDT) X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:400e:c01::230 X-BeenThere: guile-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Developers list for Guile, the GNU extensibility library" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Original-Sender: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.devel:17108 Archived-At: --e89a8ffbad19adcdda04f80b1f1d Content-Type: text/plain; charset=UTF-8 This works, pthread_mutex_t gp_gc_lock = PTHREAD_MUTEX_INITIALIZER; void gp_no_gc() { printf("lock\n"); pthread_mutex_lock(&gp_gc_lock); gp_gc_p ++; pthread_mutex_unlock(&gp_gc_lock); printf("unlock\n"); } void gp_do_gc() { printf("lock\n"); pthread_mutex_lock(&gp_gc_lock); gp_gc_p --; pthread_mutex_unlock(&gp_gc_lock); printf("unlock\n"); } void *gp_after_mark_hook(void *hook_data, void *fn_data, void *data) { SCM pt = scm_fluid_ref(gp_stacks); printf("lock\n"); pthread_mutex_lock(&gp_gc_lock); if(gp_gc_p) { pthread_mutex_unlock(&gp_gc_lock); printf("unlock\n"); return (void *)0; } pthread_mutex_unlock(&gp_gc_lock); printf("unlock\n"); ... But replacing the pthread versions with guile versions of the mutex result in the mutex getting into a locked state without leaving. I sthis a known issue? /Stefan --e89a8ffbad19adcdda04f80b1f1d Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
This works,

pthread_mutex_t gp_gc_= lock =3D PTHREAD_MUTEX_INITIALIZER;
void gp_no_gc()
{
=C2=A0 printf("lock\n");
=C2=A0 pthread_mutex_= lock(&gp_gc_lock);
=C2=A0 gp_gc_p ++;
=C2=A0 pthread_mutex_unlock(&gp_gc_lo= ck);
=C2=A0 printf("unlock\n");
}
<= br>
void gp_do_gc()
{
=C2=A0 printf("loc= k\n");
=C2=A0 pthread_mutex_lock(&gp_gc_lock);
=C2=A0 gp_gc_p -= -;
=C2=A0 pthread_mutex_unlock(&gp_gc_lock);
=C2=A0= printf("unlock\n");
}

void *g= p_after_mark_hook(void *hook_data, void *fn_data, void *data)
{
=C2=A0 SCM pt =3D scm_fluid_ref(gp_stacks);

=
=C2=A0 printf("lock\n");
=C2=A0 pthread_mute= x_lock(&gp_gc_lock);
=C2=A0 if(gp_gc_p)
=C2=A0 =C2= =A0 {
=C2=A0 =C2=A0 =C2=A0 pthread_mutex_unlock(&gp_gc_lock);=
=C2=A0 =C2=A0 =C2=A0 printf("unlock\n");
=C2=A0 = =C2=A0 =C2=A0 return (void *)0;
=C2=A0 =C2=A0 }
=C2=A0 = pthread_mutex_unlock(&gp_gc_lock);
=C2=A0 printf("unlock= \n");

...

But replacing the pthread versions with guile versions = of the mutex result in the mutex getting into a locked state without leavin= g. I sthis a known issue?

/Stefan
--e89a8ffbad19adcdda04f80b1f1d--