From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Linas Vepstas Newsgroups: gmane.lisp.guile.user Subject: [PATCH 5/12] Guile-DBI: Use remember_upto_here Date: Fri, 19 Sep 2008 09:13:37 -0500 Message-ID: <20080919141337.GF13684@linas.org> References: <3ae3aa420809190645o2fe2b746id80f53c5cb123e5b@mail.gmail.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="Bqc0IY4JZZt50bUr" X-Trace: ger.gmane.org 1221834004 7302 80.91.229.12 (19 Sep 2008 14:20:04 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 19 Sep 2008 14:20:04 +0000 (UTC) Cc: Guile User Mailing List To: Maurizio Boriani Original-X-From: guile-user-bounces+guile-user=m.gmane.org@gnu.org Fri Sep 19 16:21:00 2008 Return-path: Envelope-to: guile-user@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1Kgglm-0006jQ-HJ for guile-user@m.gmane.org; Fri, 19 Sep 2008 16:15:38 +0200 Original-Received: from localhost ([127.0.0.1]:38670 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Kggkl-0008Sg-59 for guile-user@m.gmane.org; Fri, 19 Sep 2008 10:14:35 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Kggju-0008Dj-SM for guile-user@gnu.org; Fri, 19 Sep 2008 10:13:42 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Kggju-0008DF-4g for guile-user@gnu.org; Fri, 19 Sep 2008 10:13:42 -0400 Original-Received: from [199.232.76.173] (port=36516 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Kggju-0008DA-1C for guile-user@gnu.org; Fri, 19 Sep 2008 10:13:42 -0400 Original-Received: from rv-out-0708.google.com ([209.85.198.240]:41587) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Kggjt-0005hM-F5 for guile-user@gnu.org; Fri, 19 Sep 2008 10:13:41 -0400 Original-Received: by rv-out-0708.google.com with SMTP id k29so499805rvb.6 for ; Fri, 19 Sep 2008 07:13:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:date:to:cc:subject:message-id :references:mime-version:content-type:content-disposition :in-reply-to:user-agent:from; bh=+jdBqxJrNey6RCrTW7G5sVRHrCgiyZWhfo3v5OENWPc=; b=nUpSIpMmGM1C9gdnaCdopkT/GZBe0oueIb6TRkA7Vx9bX4mMhn5crt2aJbdoGI4ARL a4IVHAEZc81g/pf7zIm7DH/u5Mm8oGNc0Xa0VOUExkT75FLTxHIxTOtkcWrGfiA0sDFO 5rPdMU/kysrVA4biJSmjH9Xtq39Oa+dnRS6L8= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=date:to:cc:subject:message-id:references:mime-version:content-type :content-disposition:in-reply-to:user-agent:from; b=pj08arHUH3XS6nb4dvcH2n2iYXyR56hrdxlnxrdxmARzhF2VkMNxYu4RwXkqm9Flo6 izVQxBXR2plRaJl//morlVfOrfvmyvfAkmBu8ni8LnZnExI3fBwQbfMow9fPvY2I7N4P N+soZnbEiPcBX1GN/2U1paT/3iWLnegJvAmpI= Original-Received: by 10.141.53.20 with SMTP id f20mr68180rvk.128.1221833620894; Fri, 19 Sep 2008 07:13:40 -0700 (PDT) Original-Received: from linas.org ( [67.100.217.179]) by mx.google.com with ESMTPS id 9sm1117801yxs.5.2008.09.19.07.13.40 (version=TLSv1/SSLv3 cipher=RC4-MD5); Fri, 19 Sep 2008 07:13:40 -0700 (PDT) Content-Disposition: inline In-Reply-To: <3ae3aa420809190645o2fe2b746id80f53c5cb123e5b@mail.gmail.com> User-Agent: Mutt/1.5.15+20070412 (2007-04-11) X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 2) X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: guile-user-bounces+guile-user=m.gmane.org@gnu.org Errors-To: guile-user-bounces+guile-user=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.user:6789 Archived-At: --Bqc0IY4JZZt50bUr Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Sprinkle code with some scm_remember_upto_here_1(), as it looks like there's a potential garbage-collection race. Also, simplify a particularly complicated test. Signed-off-by: Linas Vepstas --- src/guile-dbi.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) Index: guile-dbi-2.0.0/src/guile-dbi.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- guile-dbi-2.0.0.orig/src/guile-dbi.c 2008-09-16 20:53:23.000000000 -0500 +++ guile-dbi-2.0.0/src/guile-dbi.c 2008-09-16 21:40:24.000000000 -0500 @@ -159,7 +159,7 @@ SCM_DEFINE (close_g_db_handle, "dbi-clos SCM_ASSERT (DBI_SMOB_P(db_handle), db_handle, SCM_ARG1, "close_g_db_hand= le"); g_db_handle =3D (struct g_db_handle*)SCM_SMOB_DATA(db_handle); =20 - if (scm_equal_p (g_db_handle->closed, SCM_BOOL_T) =3D=3D SCM_BOOL_T) + if (g_db_handle->closed =3D=3D SCM_BOOL_T) { return SCM_UNSPECIFIED; } @@ -167,6 +167,7 @@ SCM_DEFINE (close_g_db_handle, "dbi-clos __gdbi_dbd_wrap(g_db_handle,(char*) __FUNCTION__,(void**) &dbd_close); = =20 if (scm_equal_p (SCM_CAR(g_db_handle->status),scm_from_int(0)) =3D=3D SC= M_BOOL_F) { + scm_remember_upto_here_1(db_handle); return SCM_UNSPECIFIED; } (*dbd_close)(g_db_handle); @@ -175,6 +176,7 @@ SCM_DEFINE (close_g_db_handle, "dbi-clos dlclose(g_db_handle->handle); g_db_handle->handle =3D NULL; } + scm_remember_upto_here_1(db_handle); return SCM_UNSPECIFIED; } #undef FUNC_NAME @@ -217,13 +219,13 @@ SCM_DEFINE (query_g_db_handle, "dbi-quer query_str =3D scm_to_locale_string(query); =20 __gdbi_dbd_wrap(g_db_handle,(char*) __FUNCTION__,(void**) &dbi_query); = =20 - if (scm_equal_p (SCM_CAR(g_db_handle->status),scm_from_int(0)) =3D=3D SC= M_BOOL_F) + if (scm_equal_p (SCM_CAR(g_db_handle->status),scm_from_int(0)) =3D=3D SC= M_BOOL_T) { - return(SCM_UNSPECIFIED); + (*dbi_query)(g_db_handle,query_str); } - =20 - (*dbi_query)(g_db_handle,query_str); =20 + free(query_str); + scm_remember_upto_here_1(db_handle); return (SCM_UNSPECIFIED); =20 } #undef FUNC_NAME @@ -240,17 +242,18 @@ SCM_DEFINE (getrow_g_db_handle, "dbi-get SCM (*dbi_getrow)(gdbi_db_handle_t*); =20 SCM_ASSERT (DBI_SMOB_P(db_handle), db_handle, SCM_ARG1, "getrow_g_db_han= dle"); =20 - g_db_handle =3D (struct g_db_handle*)SCM_SMOB_DATA(db_handle); =20 __gdbi_dbd_wrap(g_db_handle,(char*) __FUNCTION__,(void**) &dbi_getrow); = =20 if (scm_equal_p (SCM_CAR(g_db_handle->status),scm_from_int(0)) =3D=3D SC= M_BOOL_F) { + scm_remember_upto_here_1(db_handle); return(retrow); } =20 retrow =3D (*dbi_getrow)(g_db_handle); =20 + scm_remember_upto_here_1(db_handle); return(retrow); =20 } #undef FUNC_NAME @@ -270,6 +273,7 @@ SCM_DEFINE (getstat_g_db_handle, "dbi-ge =20 if (g_db_handle !=3D NULL) { + scm_remember_upto_here_1(db_handle); return (g_db_handle->status); } =20 --Bqc0IY4JZZt50bUr Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iQEVAwUBSNOzkYSDRXfAOJJBAQKcIQgArYV/XPosDSPZvNyCr3Jq3My1HpsyTBC7 kpCAq0lAdylsNn9pCUq3AOPa33pW7v1CI45OY4utL3hnOqPawV0WNVRZwCh0NgL+ xjNqtqpmsDuqWL7GjnHFuNuotL3WXeTIrkpQsVA8kppjvyMQnzbshrILwaOXmxY+ 334UcRV+xZCyBSGmC6OfgbGTsWDF7XgvlnDrClTFSMLNlEzJrSFaFmaqTMhukOiJ WwCz2wPgkz9zr51iFSMjESY+mOjj3AasZ74IUtdWJ8tUUnSf9aPJIbmKcf2PA7a6 A6SFfgfiG8fJUsvxvwXkS3oxm5fttRdWVl1sYsEEXCneT2/YBNF/UA== =qkKH -----END PGP SIGNATURE----- --Bqc0IY4JZZt50bUr--