How to safely mark a foreign slot as destroyed?

Tomas Volf <[email protected]> Sun, 22 Mar 2026 19:22:20 +0100
Newsgroups gmane.lisp.guile.devel
Message-ID <[email protected]>
Hello,

I am playing around with the C API, and am straggling to express the
following pattern:

	db = (sqlite3*)scm_foreign_object_ref(conn, 0);
	if ((ret = sqlite3_close_v2(db)) == SQLITE_OK)
		scm_foreign_object_set_x(conn, 0, 0);

If I read the documentation right, this code is wrong, because
scm_foreign_object_set_x can have early exit and not store the change to
0.  Is that correct?  And if so, how do I solve this?

Only idea I have is to store sqlite3** in the slot, and then mark the
destruction by *db = 0 (bypassing the need to call
scm_foreign_object_set_x), but there has to be more elegant, common way,
right?

Tomas

-- 
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.