On 05/07/2012 03:27 PM, Phil Pennock wrote: > On 2012-05-07 at 10:44 +0700, Janne Snabb wrote: >> >> *yield = string_copy(US"foobar"); > > This is safer. It will make a copy which should be valid for the > lifetime of the current memory allocation pool, and the caller should > have made that a longer-lived pool if necessary for its purposes.
Ok. Thank you for your answer. Unfortunately this is where it gets complicated. I wanted to avoid this complication. According to the Exim specification[1]: The dynamic memory that Exim uses when receiving a message is automatically recycled if another message is received by the same process ...and also: Because it is recycled, the normal dynamic memory cannot be used for holding data that must be preserved over a number of incoming messages on the same SMTP connection. However, Exim in fact uses two pools of dynamic memory; the second one is not recycled, and can be used for this purpose. However if my dlfunc is called from acl_smtp_connect the current default "store_pool" is set to POOL_MAIN and likewise if it is called from acl_smtp_rcvd. Should I always manually set "store_pool" to POOL_PERM to make sure that the allocated memory won't be recycled too early (in case my dlfunc is called from acl_smtp_connect and the SMTP session delivers several messages)? If I always set store_pool to POOL_PERM will my dlfunc cause memory leaks, or is POOL_PERM memory also recycled but only at the end of the complete SMTP transaction? Or is this a bug in Exim? Should Exim take care of setting "store_pool" to POOL_PERM when running a dlfunc in the connect ACL? Or should my dlfunc do some magic on its own to determine what "store_pool" it should use, depending on which ACL is calling it? [1] http://www.exim.org/exim-html-current/doc/html/spec_html/ch42.html#SECTmemhanloc -- Janne Snabb / EPIPE Communications [email protected] - http://epipe.com/ -- ## List details at https://lists.exim.org/mailman/listinfo/exim-users ## Exim details at http://www.exim.org/ ## Please use the Wiki with this list - http://wiki.exim.org/
