[PATCH] Preserve order of dlopen'd modules in dll_list::topsort

Corinna Vinschen corinna-cygwin@cygwin.com
Tue Feb 28 10:29:00 GMT 2017


Hi David,

thanks for the new patch.

On Feb 27 17:13, David Allsopp wrote:
> Corinna Vinschen wrote:
> > On Feb 25 16:27, David Allsopp wrote:
> > > This patch (below - I hope I have managed to format this email
> > > correctly) alters the behaviour of dll_list::topsort to preserve the
> > > order of dlopen'd units.
> > > [...]
> > > This patch is licensed under 2-clause BSD as per winsup/CONTRIBUTORS,
> > > Copyright (c) 2017, MetaStack Solutions Ltd.

Do you really want to make it (c) MetaStack?

I'm asking because this way I can't add you personally as contributor to
the CONTRIBUTORS file and you will have to continue to add per-patch
copyright.  The idea of the CONTRIBUTORS file was to claim BSD 2-clause
for your first and all subsequent patches you provide to Cygwin, so you
never have to think about the copyright stuff again.  Your choice.

> > - While you're at it, please reformat your patch so the line length
> >   is not longer than 80 chars.
> 
> Done - sorry, I'd inferred a longer length from a few other longer lines!

Yeah, the surrounding codes has a few minor formatting issues, in fact.

> > - Last but not least.  You add code to topsort so the loaded DLLs
> >   are handled first.  The subsequent code is untouched.  However,
> >   shouldn't the next loop then restrict calling populate_deps to the
> >   linked DLLs only, at least for performance?
> 
> Oops :$ That's an artefact of the "story" of the patch's development.
> As it happens, the first dlopen'd DLL would have been initialised in
> the second loop, not the first, but the presence of two loops like
> that was indeed mostly inefficient. I've kept the original one as a
> "fast path" for the case of no dlopen'd DLLs, though I don't know if
> that's a worthwhile optimisation. 

Well, interesting point.  Basically your new code is a drop-in
replacement, except for the fact that it always calls an extra
cmalloc/cfree.  However, this is only required if loaded_dlls > 0 so I
think we may get away with removing the old loop with a simple tweak to
your new one:

  dll** dlopen_deps = NULL;
  if (loaded_dlls > 0)
    dlopen_deps = (dll**) cmalloc (HEAP_2_DLL, maxdeps*sizeof (dll*));
  while ((d = d->next))
    {
      [...]
    }
  if (dlopen_deps)
    cfree (dlopen_deps);

Do you want to tweak your patch accordingly?


Thanks,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://cygwin.com/pipermail/cygwin-patches/attachments/20170228/8ce52621/attachment.sig>


More information about the Cygwin-patches mailing list