Ethereal-dev: Re: [Ethereal-dev] Re: [Ethereal-cvs] rev 12728: /trunk/plugins/mate/: Makefile.

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: Guy Harris <gharris@xxxxxxxxx>
Date: Sun, 12 Dec 2004 17:00:34 -0800
Richard Sharpe wrote:
On Sun, 12 Dec 2004 lroland@xxxxxxxxxxxx wrote:


- rename mate.[dll/so] to zzmate.[dll/so] so it gets initialized as
the very last protocol (so that fields from every dissector can be
used).


Hmmm, this is not so robust. Someone might have a zzzmumble protocol one
day.

...and the plugins are initialized in the order in which "readdir()"/"g_dir_read()" return them; there is *NO* absolute guarantee that this order is alphabetical!

Perhaps we should allow a plugin to be placed in a list of modules to
be initialized last (in the order specified in the preference or
whatever).

Secondly, at some stage there could be more than one module that we want
initialized after all the others so they can gain access to all the
symbols and field that will be available.

Note that the initialization process for dissectors is a two-stage process.

In the first stage, the "register" routines for the dissectors are called, in no guaranteed order. Nothing done in a register routine should rely on any other dissector or dissectors having been registered before it or on any other dissector or dissectors *not* having been registered before it. (Perhaps we should use a random number generator, seeded from an appropriately random source, to punish dissectors that *do* assume that. :-))

In the second stage, the "register handoff" routines for the dissectors are called, in no guaranteed order. Code in a "register handoff" routine can rely on the register routines for all dissectors, including itself, having been called. It cannot, of course, rely on any other dissectors' "register handoff" routines having been called, or not having been called.

This was necessary in order to allow dissectors to register in dissector tables created by other dissectors, and to get handles on other dissectors. It could also be useful for other purposes...

...such as doing all the work that "mate_make_config()" does.

This would, of course, mean that MATE would be registered regardless of whether "mate_make_config()" succeeded, as the code in "proto_register_mate()" that registers MATE wouldn't call "mate_make_config()" and thus wouldn't know whether doing so would succeed, but, as a London School of Economics dropout[*] once said, "you can't always get what you want".

[*] The "Prominent alumni" page at the LSE:

	http://www.lse.ac.uk/collections/pressAndInformationOffice/alumni.htm

says he "Registered for BSc Econ 1961-1963"; I guess he was too busy with his other career after that....

Regards
-----
Richard Sharpe, rsharpe[at]richardsharpe.com, rsharpe[at]samba.org,
sharpe[at]ethereal.com, http://www.richardsharpe.com

_______________________________________________
Ethereal-dev mailing list
Ethereal-dev@xxxxxxxxxxxx
http://www.ethereal.com/mailman/listinfo/ethereal-dev