Re: with-foreign-object allocation question

"Tim Bradshaw (as tfb at cley dot com)" <[email protected]> Fri, 10 Apr 2026 17:56:04 +0100
Newsgroups gmane.lisp.lispworks.general
Message-ID <[email protected]>
Is this also the case for things declared dynamic-extent when they are stack allocated?  I mean: do they share the stack with stack-allocated foreign objects?

--tim

> On 10 Apr 2026, at 15:44, Martin Simmons <[email protected]> wrote:
> 
> Yes, that's correct.  Moreover, the LW with-dynamic-foreign-objects/alloca
> stack is separate from the main control stack, so will only be overwritten by
> other dynamic allocation nested inside this form (or later in the same thread
> if it is used after the end of its dynamic scope).
> 
> --
> Martin Simmons
> LispWorks Ltd
> http://www.lispworks.com/
> 
> 
> 
>>>>>> On Fri, 10 Apr 2026 12:41:08 +0100, Tim Bradshaw (as tfb at cley dot com) said:
>> 
>> If LW's alloca is like C's, then presumably the thing is on the stack and is probably 'legal' until something else overwrites it with probably-bad results?
>> 
>> --tim
>> 
>>>> On 10 Apr 2026, at 09:51, Madhu (as enometh at meer dot net) <[email protected]> wrote:
>>> 
>>> sorry for the immediate followup:
>>> 
>>> actuallythere is a another deeper problem because ARGS may be used
>>> after it is freed, it really should be allocated and not freed, but
>>> that is not the point of failure in other lisps, or on lispworks,
>>> 
>>> *  In  <[email protected]>
>>> I wrote on Fri, 10 Apr 2026 14:08:38 +0530 (IST)
>>> 
>>>> I am trying to fix a lethal memory bug in
>>>> https://github.com/StjepanPoljak/musicli src/jack.c: (start-jack-callbacks)
>>>> where there is a call
>>>> 
>>>> (cffi:with-foreign-object (args '(:pointer (:struct jack-cb-args)))
>>>>    ... clobber 24 bytes == (sizeof (:struct jack-cb-args))
>>>>       allocated at ARGS ...)
>>>> 
>>>> which should really read
>>>> 
>>>> (cffi:with-foreign-object '(:struct jack-cb-args) ...)
>>>> 
>>>> this reliably crashes other lisps, but not lwl 64 personal.  what
>>>> could be the reason for this resiliance? macroexpansion on the
>>>> incorrect form shows
>>>> 
>>>> (fli:with-dynamic-foreign-objects nil
>>>> (let* ((#:size6844 8)
>>>>        (args (fli:alloca :type :byte :nelems #:size6844)))
>>>> 
>>>> Which shows only 8 bytes being allocated. but are allocations aligned
>>>> at > 24byte offsets, so the memory corruption doesn't show up in
>>>> lispworks in this case?
>>>> 
>>>> -- Madhu
>>>> 
>>>> (project author bcc'd)
>>> 
>>> _______________________________________________
>>> Lisp Hug - the mailing list for LispWorks users
>>> [email protected]
>>> http://www.lispworks.com/support/lisp-hug.html
>> 
>> _______________________________________________
>> Lisp Hug - the mailing list for LispWorks users
>> [email protected]
>> http://www.lispworks.com/support/lisp-hug.html
>> 
> 
> _______________________________________________
> Lisp Hug - the mailing list for LispWorks users
> [email protected]
> http://www.lispworks.com/support/lisp-hug.html

_______________________________________________
Lisp Hug - the mailing list for LispWorks users
[email protected]
http://www.lispworks.com/support/lisp-hug.html