<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    <div class="markdown-here-wrapper" data-md-url="" style="">
      <p style="margin: 0px 0px 1.2em !important;">Hi,<br>
        you can still do that, using MemorySegment::ofAddress:</p>
      <pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;">
public MemorySegment allocate(long byteSize, long byteAlignment) {
    if (byteAlignment > MAX_ALIGNMENT) {
        throw new IllegalArgumentException();
    }

    try {
        var arena = Arena.ofAuto();
         long address = (long)MALLOC.invokeExact(byteSize); // I assume  this should work since other reinterpret casts like unsigned <->  int is legal here
        return MemorySegment.ofAddresss(address, byteSize, arena, () -> {
                try {
                    FREE.invokeExact(address);
                } catch(Throwable e) {
                    throw new RuntimeException(e);
                }
        });

    } catch(Throwable e) {
        throw new RuntimeException(e);
    }
}
</code></pre>
      <p style="margin: 0px 0px 1.2em !important;">That is, there is a
        new overload in <code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;">MemorySegment::ofAddress</code>
        that does exactly what you want.</p>
      <p style="margin: 0px 0px 1.2em !important;">I hope this helps.</p>
      <p style="margin: 0px 0px 1.2em !important;">Cheers<br>
        Maurizio</p>
      <p style="margin: 0px 0px 1.2em !important;">On 04/03/2023 10:10,
        Quân Anh Mai wrote:</p>
      <p style="margin: 0px 0px 1.2em !important;"></p>
      <div class="markdown-here-exclude">
        <p></p>
        <blockquote type="cite" cite="mid:CAPvyiyJ9fDJCF-Wj-=wNK9tM2DLBZ_SrGs3cTe9fhDCudZaPew@mail.gmail.com">
          
          <div dir="ltr">Hi,
            <div><br>
            </div>
            <div>I noticed that the method Arena::addCloseAction has
              been dropped from the API. May I ask in that case what is
              the way to create a custom allocator that manages its
              allocated memory? With the method, I believe it can be
              achieved with something like this:</div>
            <div><br>
            </div>
            <div>public MemorySegment allocate(long byteSize, long
              byteAlignment) {</div>
            <div>    if (byteAlignment > MAX_ALIGNMENT) {</div>
            <div>        throw new IllegalArgumentException();</div>
            <div>    }</div>
            <div><br>
            </div>
            <div>    try {</div>
            <div>        var arena = Arena.ofAuto();</div>
            <div>        long address =
              (long)MALLOC.invokeExact(byteSize); // I assume this
              should work since other reinterpret casts like unsigned
              <-> int is legal here</div>
            <div>        arena.addCloseAction(() -> {</div>
            <div>                try {</div>
            <div>                    FREE.invokeExact(address);</div>
            <div>                } catch(Throwable e) {</div>
            <div>                    throw new RuntimeException(e);</div>
            <div>                }</div>
            <div>        });</div>
            <div>        return MemorySegment.ofAddress(address,
              byteSize, arena);</div>
            <div>    } catch(Throwable e) {</div>
            <div>        throw new RuntimeException(e);</div>
            <div>    }</div>
            <div>}</div>
            <div><br>
            </div>
            <div>Thanks a lot,</div>
            <div>Quan Anh</div>
            <div>    </div>
          </div>
        </blockquote>
        <p></p>
      </div>
      <p style="margin: 0px 0px 1.2em !important;"></p>
      <div title="MDH:PHA+SGksPGJyPnlvdSBjYW4gc3RpbGwgZG8gdGhhdCwgdXNpbmcgTWVtb3J5U2VnbWVudDo6b2ZBZGRyZXNzOjxicj48YnI+YGBgPGJyPjwvcD48ZGl2PnB1YmxpYyBNZW1vcnlTZWdtZW50IGFsbG9j
YXRlKGxvbmcgYnl0ZVNpemUsIGxvbmcgYnl0ZUFsaWdubWVudCkgezwvZGl2PjxkaXY+Jm5ic3A7
ICZuYnNwOyBpZiAoYnl0ZUFsaWdubWVudCAmZ3Q7IE1BWF9BTElHTk1FTlQpIHs8L2Rpdj48ZGl2
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhj
ZXB0aW9uKCk7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7IH08L2Rpdj48ZGl2Pjxicj48L2Rpdj48
ZGl2PiZuYnNwOyAmbmJzcDsgdHJ5IHs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyB2YXIgYXJlbmEgPSBBcmVuYS5vZkF1dG8oKTs8L2Rpdj48ZGl2PiZuYnNwOwogJm5ic3A7
ICZuYnNwOyAmbmJzcDsgbG9uZyBhZGRyZXNzID0gKGxvbmcpTUFMTE9DLmludm9rZUV4YWN0KGJ5
dGVTaXplKTsgLy8gSSBhc3N1bWUgCnRoaXMgc2hvdWxkIHdvcmsgc2luY2Ugb3RoZXIgcmVpbnRl
cnByZXQgY2FzdHMgbGlrZSB1bnNpZ25lZCAmbHQ7LSZndDsgCmludCBpcyBsZWdhbCBoZXJlPC9k
aXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgcmV0dXJuIE1lbW9yeVNlZ21lbnQu
b2ZBZGRyZXNzcyhhZGRyZXNzLCBieXRlU2l6ZSwgYXJlbmEsICgpIC0mZ3Q7IHs8L2Rpdj48ZGl2
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
dHJ5IHs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBGUkVFLmludm9rZUV4YWN0KGFkZHJlc3MpOzwv
ZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyB9IGNhdGNoKFRocm93YWJsZSBlKSB7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgdGhy
b3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IH08L2Rpdj48ZGl2PiZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyB9KTs8YnI+PC9kaXY+PGJyPjxkaXY+Jm5ic3A7ICZuYnNwOyB9
IGNhdGNoKFRocm93YWJsZSBlKSB7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7
IH08L2Rpdj48ZGl2Pn08YnI+YGBgPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5UaGF0IGlzLCB0
aGVyZSBpcyBhIG5ldyBvdmVybG9hZCBpbiBgTWVtb3J5U2VnbWVudDo6b2ZBZGRyZXNzYCB0aGF0
IGRvZXMgZXhhY3RseSB3aGF0IHlvdSB3YW50LjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+SSBo
b3BlIHRoaXMgaGVscHMuPC9kaXY+PGRpdj48YnI+Q2hlZXJzPGJyPk1hdXJpemlvPGJyPjwvZGl2
PjxkaXY+PGJyPjwvZGl2PjxkaXYgY2xhc3M9Im1vei1jaXRlLXByZWZpeCI+T24gMDQvMDMvMjAy
MyAxMDoxMCwgUXXDom4gQW5oIE1haSB3cm90ZTo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgdHlwZT0i
Y2l0ZSIgY2l0ZT0ibWlkOkNBUHZ5aXlKOWZESkNGLVdqLT13Tks5dE0yRExCWl9TckdzM2NUZTlm
aERDdWRaYVBld0BtYWlsLmdtYWlsLmNvbSI+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBl
IiBjb250ZW50PSJ0ZXh0L2h0bWw7ICI+PGRpdiBkaXI9Imx0ciI+SGksPGRpdj48YnI+PC9kaXY+
PGRpdj5JIG5vdGljZWQgdGhhdCB0aGUgbWV0aG9kIEFyZW5hOjphZGRDbG9zZUFjdGlvbiBoYXMg
YmVlbiBkcm9wcGVkIGZyb20gdGhlIEFQSS4gTWF5IEkgYXNrIGluIHRoYXQgY2FzZSB3aGF0IGlz
IHRoZSB3YXkgdG8gY3JlYXRlIGEgY3VzdG9tJm5ic3A7YWxsb2NhdG9yIHRoYXQgbWFuYWdlcyBp
dHMgYWxsb2NhdGVkIG1lbW9yeT8gV2l0aCB0aGUgbWV0aG9kLCBJIGJlbGlldmUgaXQgY2FuIGJl
IGFjaGlldmVkIHdpdGggc29tZXRoaW5nIGxpa2UgdGhpczo8L2Rpdj48ZGl2Pjxicj48L2Rpdj48
ZGl2PnB1YmxpYyBNZW1vcnlTZWdtZW50IGFsbG9jYXRlKGxvbmcgYnl0ZVNpemUsIGxvbmcgYnl0
ZUFsaWdubWVudCkgezwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyBpZiAoYnl0ZUFsaWdubWVudCAm
Z3Q7IE1BWF9BTElHTk1FTlQpIHs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7PC9kaXY+PGRpdj4mbmJzcDsg
Jm5ic3A7IH08L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgdHJ5IHs8L2Rp
dj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB2YXIgYXJlbmEgPSBBcmVuYS5vZkF1
dG8oKTs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBsb25nIGFkZHJlc3Mg
PSAobG9uZylNQUxMT0MuaW52b2tlRXhhY3QoYnl0ZVNpemUpOyAvLyBJIGFzc3VtZSB0aGlzIHNo
b3VsZCB3b3JrIHNpbmNlIG90aGVyIHJlaW50ZXJwcmV0IGNhc3RzIGxpa2UgdW5zaWduZWQgJmx0
Oy0mZ3Q7IGludCBpcyBsZWdhbCBoZXJlPC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgYXJlbmEuYWRkQ2xvc2VBY3Rpb24oKCkgLSZndDsgezwvZGl2PjxkaXY+Jm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB0cnkgezwvZGl2
PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7IEZSRUUuaW52b2tlRXhhY3QoYWRkcmVzcyk7PC9kaXY+PGRpdj4m
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IH0g
Y2F0Y2goVGhyb3dhYmxlIGUpIHs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB0aHJvdyBuZXcgUnVu
dGltZUV4Y2VwdGlvbihlKTs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgfTwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7IH0pOzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHJldHVy
biBNZW1vcnlTZWdtZW50Lm9mQWRkcmVzcyhhZGRyZXNzLCBieXRlU2l6ZSwgYXJlbmEpOzwvZGl2
PjxkaXY+Jm5ic3A7ICZuYnNwOyB9IGNhdGNoKFRocm93YWJsZSBlKSB7PC9kaXY+PGRpdj4mbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7PC9k
aXY+PGRpdj4mbmJzcDsgJm5ic3A7IH08L2Rpdj48ZGl2Pn08L2Rpdj48ZGl2Pjxicj48L2Rpdj48
ZGl2PlRoYW5rcyBhIGxvdCw8L2Rpdj48ZGl2PlF1YW4gQW5oPC9kaXY+PGRpdj4mbmJzcDsgJm5i
        c3A7Jm5ic3A7PC9kaXY+PC9kaXY+Cgo8L2Jsb2NrcXVvdGU+" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0;">​</div>
    </div>
  </body>
</html>