Ethereal-dev: Re: [Ethereal-dev] ememification of tvb_get_tring() and friends
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: ronnie sahlberg <ronniesahlberg@xxxxxxxxx>
Date: Wed, 3 Aug 2005 03:46:00 +1000
>So : >tvb_get_ephemeral_string() + tvb_get_sessional_string() >tvb_get_ephemeral_faked_unicode() + ... > >or any better suggestions? Everyone happy with this naming convention tvb_get_ephemeral_...() for the allocations with packet dissection allocation lifetime? If not and someone has a better naming convention, it should really just be a matter of some sed magic to change it anyway. On 7/29/05, ronnie sahlberg <ronniesahlberg@xxxxxxxxx> wrote: > On 7/29/05, LEGO <luis.ontanon@xxxxxxxxx> wrote: > > Ephemeral, it is a little too long but IMHO it gets right to the point. > > > > ephemeral_alloc() > > ephemeral_memdup() > > ephemeral_strdup() > > ephemeral_strndup() > > ephemeral_strdup_printf() > > tvb_get_ephemeral_string() > > tvb_ephemeral_memdup() > > > > > > While for the per session ones I thought in "sessional" that is > > something in between seasonal and session :-P > > While it is good to have an api that is orthogonal, while i have been looking at > tvb_get_string() uses virtually every single use is very temporary in scope. > I.e. grab the string, process or display it and then immediately free it. > > Would it be useful to add two such functions > tvb_get_ephemeral_string() and > tvb_get_sessional_string() > considering that there will be virtually no users of the second one? > Instead of just a single one tvb_get_string() that is essentially > tvb_get_ephemeral_string() ? > > Ok, I have no strong feelings either way. > > So : > tvb_get_ephemeral_string() + tvb_get_sessional_string() > tvb_get_ephemeral_faked_unicode() + ... > > or any better suggestions? > > > > > Luis > > > > > > On 7/29/05, Ulf Lamping <ulf.lamping@xxxxxx> wrote: > > > ronnie sahlberg wrote: > > > > > > >List > > > > > > > >during my crusade to ememify the tvb_get_string() (and friends such as > > > >tvb_fake_unicode(), tvb_get_text(), tvb_get_stringz()) > > > > > > > > > > > Hmmm, I found the function names chosen are very unintuitive at all. I > > > wouldn't know without reading the docs the difference between these > > > functions. And even worse the name tvb_fake_unicode() seems to be > > > completely odd in this row (at least to me). Should this be something > > > like tvb_get_faked_unicode() ? > > > > > > >i have found several obvious memleaks (and a lot more nonobvious like > > > >where an exception is thrown between where tvb_get_string() is called > > > >and before g_free()) which is good. > > > > > > > > > > > Handling the memleaks caused by exceptions isn't really obvious. > > > However, as it's name implies it should be an exception ... > > > > > > And yes, preventing problems like this is a good thing :-) > > > > > > >Something that would imho be good since the number of both obvious and > > > >non-obvious memleaks for these calls show that the api in using them > > > >is too complex. > > > > > > > > > > > No. The problem is not complexity of the functions (their job is quite > > > simple) but simply wrong *naming* of the function(s) is the problem. The > > > function named tvb_get_string() gives no real hint that you have to free > > > the string by yourself afterwards. > > > > > > As an opposite, the g_strdup named functions from glib (although glib is > > > itself a bit inconsistent in naming) makes it pretty clear that > > > something is duplicated and gives at least a hint to take care about the > > > function output. So if we had used something like tvb_strdup() would > > > have probably reduced our problems a lot on this topic. Of course, this > > > function name would be misleading with the new functionality you are > > > going to provide. > > > > > > And again: Never underestimate the power of function and variable naming > > > to avoid such problems. > > > > > > On the other hand, having at least four functions to get a string from a > > > tvb maybe proof you're probably right that the API is complex but for a > > > different reason :-) > > > > > > >it would probably also speed up ethereal a tiny tiny fraction reducing > > > >the amount of g_free() calls made but that is likely insignificant. > > > > > > > > > > > > > > > I would think the performance gain will be minimal, but a step in the > > > right direction and better than nothing ;-) > > > > > > >once this is finished i plan not to have any explicit > > > >ep_tvb_get_string() calls anymore. only the tvb_get_string() and > > > >friends but with a different semantic on how/when memory is freed. > > > >Since so very few functions actually need tvb_get_string() data with > > > >longer than to the end of dissecting the current packet semantics > > > >those other very few users can just do their own g_strdup()/g_free() > > > > or when added ec_alloc() call (like ep_alloc() but with lifetime > > > >until new capture is loaded). > > > > > > > > > > > >comments? > > > > > > > > > > > The problem seems to be common and your solution to it seems reasonable. > > > I'm happy that someone takes a look at these things. > > > > > > BTW: One could expect that the string will last as long as the tvb > > > exists. This was an idea I had when reading your mail. Why not attach > > > the strings to the tvb and free them when the tvb is freed? This seems > > > to be more obvious than your idea (at least to me) ... However, it might > > > be easier to implement that all memory blocks are related to the packet > > > dissection and freed afterwards as you've described your solution, so > > > there's no real difference in the two possibilities, so simply chose the > > > easier to implement one :-) > > > > > > And what about changing the names of the functions to something that > > > makes it more obvious that the string will be gone after the packet was > > > processed? > > > > > > I don't have a good idea about this naming, maybe something like: > > > transient, temp or alike, so this functions named like: > > > tvb_get_transient_string(), however, there must be a better name than my > > > suggestions ... > > > > > > Regards, ULFL > > > > > > _______________________________________________ > > > Ethereal-dev mailing list > > > Ethereal-dev@xxxxxxxxxxxx > > > http://www.ethereal.com/mailman/listinfo/ethereal-dev > > > > > > > > > -- > > This information is top security. When you have read it, destroy yourself. > > -- Marshall McLuhan > > > > _______________________________________________ > > Ethereal-dev mailing list > > Ethereal-dev@xxxxxxxxxxxx > > http://www.ethereal.com/mailman/listinfo/ethereal-dev > > >
- Prev by Date: [Ethereal-dev] Re: [Ethereal-cvs] rev 15195: /trunk/epan/dissectors/: packet-sdp.c (Out of the office)
- Next by Date: Re: [Ethereal-dev] ememification of tvb_get_tring() and friends
- Previous by thread: [Ethereal-dev] Re: [Ethereal-cvs] rev 15195: /trunk/epan/dissectors/: packet-sdp.c (Out of the office)
- Next by thread: Re: [Ethereal-dev] ememification of tvb_get_tring() and friends
- Index(es):