Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [mosquitto-dev] Question about storing messages in the heap of broker

The strdup is to create an owned string. C, unfortunately, does not distinguish between owned and referenced strings. `tokens` holds owned strings and will free them when finished. If you give it a reference, such as an automatic variable, the cleanup routine will segfault.

On Wed, Apr 15, 2020 at 2:42 PM Sergey Grekhov <grekhss@xxxxxxxxx> wrote:
On 15.04.2020 19:24, Greg Troxel wrote:
> For a datapoint, I have been running mosquitto on netbsd-8 since 20
> February, with moderate activity and an outgoing bridge, and it is at 23
> MB process size, 4M RSS.
>
> A similar process started since 19 February is 19MB/4M.  This one has 3
> clients reporting once/minute, another 2 every 2 minutes, and weather
> from a third every 5, plus incoming bridge traffic.
>
>
> I wonder if you would be better off using a malloc library that has
> these debugging features built in, with the normal analysis tools.
Probably, this looks like a good option, although due to H/W
restrictions it will not be so easy.
> My impression is that mosquitto does not have  any really bad leaks, but
> there could be minor issues.  Lots of people are running it and there
> aren't screams of bad memory behavior.    I don't mean to doubt your
> reality; it could be not bad but observable because you are paying
> attention, or only happens in your environment.  Or you could be the
> first to really look.

Mosquitto I am investigating has some modifications out of the scope of
main repo on GitHub. So, maybe this issue is indeed only for my environment.

Regarding minor issues: there is one thing which looks really strange.
The code is following:

tokens->topic = mosquitto__strdup("");

As soon as allocation is made using wrapper, I guess that it is possible
to avoid this strange code. E.g.:

const char *EMPTY_STR = "";

//-----

  void mosquitto__free(void *mem)
  {
        if(mem == NULL || mem == EMPTY_STR){
                 return;
        }
//-----

temp->source_id = EMPTY_STR;

I am not sure if it is worth to be an issue on GitHub, since memory
overhead is really small. =)



_______________________________________________
mosquitto-dev mailing list
mosquitto-dev@xxxxxxxxxxx
To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/mosquitto-dev

Back to the top