Re: module cleanup [3/n]

"Gary V. Vaughan" <[email protected]>
Newsgroups gmane.comp.gnu.m4.patches
Message-ID <[email protected]>
Hi Eric,

On Sep 13, 2007, at 1:47 PM, Eric Blake wrote:
> According to Gary V. Vaughan on 9/11/2007 3:44 PM:
>>> This adds a refcount builtin to the load module.  I still think  
>>> it is a
>>> bit odd that importing helper symbols from an m4 library affects the
>>> symbol table, but didn't see an easy way to fix it as part of  
>>> this patch.
>>
>> I'm not sure I understand you.  Could you explain what you mean by
>> 'helper symbol',
>> and what 'symbol table' you are referring to?
>
> libgnu's esyscmd does M4_MODULE_IMPORT (m4, m4_set_sysval); in other
> words, it needs the m4_set_sysval entry point in libm4.  But in the
> process of importing that entry point, it currently ALSO had the side
> effect of re-loading all of libm4's builtins into the m4 symbol table.

Ah yes, now I follow.  Thanks for persevering with me :-)  FWIW, I agree
that a symbol imported at the C level purely for the purposes of  
providing
support for a builtin from another module shouldn't enforce having the
imported module's builtings loaded at the m4 level.

I think the root of this particular  problem is that there isn't yet
sufficient separation of concerns between modules that are in memory
(courtesy of libltdl) and modules that are fully loaded into the m4  
symbol
table (courtesy of the m4 module system).  Once we have things  
abstracted
cleanly, it should be a lot easier to load and unload modules at the m4
layer independently of whether libltdl has them in memory at the moment.

>> I see no reason to add another arbitrary builtin, where m4modules  
>> itself
>> caneasily be extended to provide sufficient functionality.  Let's  
>> revert
>> this, andinstead have m4modules list the stack of loaded modules.
>
> OK, I'll work on that next.  It may be another couple days before I  
> post
> my 4/n patch.

Cool!

>> If we were to keep the refcount builtin, libltdl tracks it for us, so
>> there is no need to duplicate that code again. The libltdl  
>> refcount is
>> retrieved with:
>>
>>     lt_dlgetinfo(module->handle)->ref_count
>
> Indeed, the lt refcount is what we were using prior to my patch.   
> However,
> as pointed out above, I don't think it is the right count to use.

After I posted my last mail and poked around in the code to cleanup some
variable names, I realised this.  D'oh!

> On the other hand, if I make m4modules track load/unload pairs  
> reliably
> (something which libltdl does not do, since it flattens multiply- 
> loaded
> modules into a single position in its traversal), then I could use the
> m4modules implementation to track refcount rather than having a  
> refcount
> member in m4_module.  I'll play with this idea while preparing the  
> patch.

Hmmm... seems there is room for improvement in libltdl here.   
However, it
might be easier to to have our m4modules builtin traverse libltdl's
flattened module list once, but output the module name once per  
(libltdl)
ref_count...

While implementing that, please propose improved semantics for the  
libltdl
APIs that would have made things easier for m4.

Cheers,
	Gary
-- 
   ())_.              Email me: [email protected]
   ( '/           Read my blog: http://blog.azazil.net
   / )=         ...and my book: http://sources.redhat.com/autobook
`(_~)_      Join my AGLOCO Network: http://www.agloco.com/r/BBBS7912

_______________________________________________
M4-patches mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/m4-patches
PGP.sig (application/pgp-signature, 186 B) - not displayed
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.