develooper Front page | perl.perl5.changes | Postings from September 2021

[Perl/perl5] c3c34c: perl_alloc() wants zeroed memory so should usecal...

From:
Nicholas Clark via perl5-changes
Date:
September 22, 2021 09:59
Subject:
[Perl/perl5] c3c34c: perl_alloc() wants zeroed memory so should usecal...
Message ID:
Perl/perl5/push/refs/heads/perl_alloc_using-simplification/000000-e02632@github.com
  Branch: refs/heads/perl_alloc_using-simplification
  Home:   https://github.com/Perl/perl5
  Commit: c3c34c10a438edbfff32a4274b1a8de4306d535c
      https://github.com/Perl/perl5/commit/c3c34c10a438edbfff32a4274b1a8de4306d535c
  Author: Nicholas Clark <nick@ccl4.org>
  Date:   2021-09-22 (Wed, 22 Sep 2021)

  Changed paths:
    M perl.c

  Log Message:
  -----------
  perl_alloc() wants zeroed memory so should use calloc()

The previous code

1) allocated memory with PerlMem_malloc()
2) passed the pointer to S_init_tls_and_interp()
3) called Zero() or ZeroD()
4) optionally invoked INIT_TRACK_MEMPOOL()
5) returned the pointer

ZeroD() and Zero() are equivalent, apart from the return value of the
expression.

The layers of functions and macros obscured what what was actually
happening, and what the ordering dependencies are:

* S_init_tls_and_interp() uses only the address of the pointer
* Zero() zeros the memory
* Only INIT_TRACK_MEMPOOL() touches the contents
* all the "memory wrap" macros inside the other macros can't "trigger"

Hence the order of Zero() and S_init_tls_and_interp() can be swapped,
at which point Zero() immediately follows malloc(), meaning that the two
should be be replaced with calloc().

This simplifies the function considerably.


  Commit: 7845680176b590258093de5b7c8110855b823889
      https://github.com/Perl/perl5/commit/7845680176b590258093de5b7c8110855b823889
  Author: Nicholas Clark <nick@ccl4.org>
  Date:   2021-09-22 (Wed, 22 Sep 2021)

  Changed paths:
    M perl.c

  Log Message:
  -----------
  No need to wrap INIT_TRACK_MEMPOOL with #ifdef PERL_TRACK_MEMPOOL

`INIT_TRACK_MEMPOOL` is defined as a no-op if `PERL_TRACK_MEMPOOL` is not
defined, so no need to wrap it in `#ifdef`.

Spotted by Ilmari.


  Commit: e026325d705c76f8fd2fc2cb1c957980c01ab7fa
      https://github.com/Perl/perl5/commit/e026325d705c76f8fd2fc2cb1c957980c01ab7fa
  Author: Nicholas Clark <nick@ccl4.org>
  Date:   2021-09-22 (Wed, 22 Sep 2021)

  Changed paths:
    M perl.c

  Log Message:
  -----------
  perl_alloc_using() should use ->pCalloc

Use ->pCalloc  instead of ->pMalloc followed by Zero()

This commit is analogous to the change in perl_alloc() in the previous
commit - the order of S_init_tls_and_interp() and Zero() can be swapped,
at which point the change to use "calloc" is obvious.


Compare: https://github.com/Perl/perl5/compare/c3c34c10a438%5E...e026325d705c



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About