Just realize that I sent the mail using gmail, which seems be filtered by this maillist. Please ignore this<div>if you&#39;ve seen it.</div><div><br></div><div>Regards,</div><div>Jinghao<br><br><div class="gmail_quote">---------- Forwarded message ----------<br>

From: <b class="gmail_sendername">Shi Jinghao</b> <span dir="ltr">&lt;<a href="mailto:jhshi89@gmail.com">jhshi89@gmail.com</a>&gt;</span><br>Date: Tue, Mar 27, 2012 at 9:23 PM<br>Subject: How to reclaim the memory allocated by frame_alloc?<br>

To: <a href="mailto:barrelfish-users@lists.inf.ethz.ch">barrelfish-users@lists.inf.ethz.ch</a><br><br><br>Hi,<div><br></div><div>I need to send message between cores in barrelfish (X86_32). And somehow I decide to send the capability </div>

<div>of a frame that contains the message, since the message will have variable size. And I was wondering what&#39;s</div>
<div>the proper way to reclaim the message frame when it&#39;s useless.</div><div><br></div><div>I create a message frame like this (details like error checking are omitted, also for simplicity, assume message</div><div>

size is fixed (MSG_SIZE)):</div>
<div><br></div><div>    // allocate a frame capability</div><div>    struct capref* msgcap = (struct capref*) malloc (sizeof(struct capref));</div><div>    frame_alloc(msgcap, MSG_SIZE, NULL);</div><div>    </div><div>    // map to my address space so I can fill the message body</div>


<div>    struct my_message* msg;</div><div>    vspace_map_one_frame_attr((void**)&amp;msg, MSG_SIZE, *msgcap, VREGION_FLAGS_READ_WRITE, NULL, NULL);</div><div><br></div><div>Then I send the frame cap to another process (on a different core). </div>


<div><br></div><div>On receiver side, I get the message like this:</div><div><br></div><div>    struct my_message* msg;</div><div>    vspace_map_one_frame_attr(&amp;msg, MSG_SIZE, msgcap, VREGION_FLAGS_READ_WRITE, NULL, NULL);</div>


<div><br></div><div>However, how am I supposed to reclaim the message? Based on my understanding, my current try is:</div><div><br></div><div>    // on sender side</div><div>    cap_revoke(*msgcap);</div><div>    cap_destroy(*msgcap);</div>


<div>    free(msgcap);  // msgcap is allocated by malloc</div><div>    vspace_unmap(msg);</div><div><br></div><div>    // on receiver side</div><div>    vspace_unmap(msg);</div><div><br></div><div>But I don&#39;t know if this is the right way to do it. (Though no explicit problem occurs until now). Any suggestions on this?</div>


<div><br></div><div>PS: on receiver side, vspace_map_on_frame_attr won&#39;t allocate any new memory, right? So after this, sender and receiver</div><div>will share the same physical memory. Please clarify if my understanding is right.</div>


<div><br></div><div>Thanks for your reading.</div><div><br></div><div>Regards,</div><div>Jinghao</div>
</div><br></div>