Howdy,

> ...in component CtpForwardingEngineP, there are two pools besides
> SendQueue, namely MessagePool and QEntryPool.

I would rephrase this as "there are two pools and one queue", since the
SendQueue really is a queue.

----
interface Queue<fe_queue_entry_t*> as SendQueue;
interface Pool<fe_queue_entry_t> as QEntryPool;
interface Pool<message_t> as MessagePool;
----

> Could anyone give me some hint on what is the relation between these
> three?

Here is my reading of the "forward" function which uses all three of
these.  A message comes into the system to be forwarded by CTP.  We grab
memory for a fe_queue_entry_t and a message_t from the QEntryPool and
MessagePool respectively:

----
qe = call QEntryPool.get();
if (qe == NULL) {
    call CollectionDebug.logEvent(NET_C_FE_GET_MSGPOOL_ERR);
    return m;
}

newMsg = call MessagePool.get();
if (newMsg == NULL) {
    call CollectionDebug.logEvent(NET_C_FE_GET_QEPOOL_ERR);
    return m;
}
----

Quick side note.  Shouldn't we return qu to the QEntryPool if nemMsg is
null?  I admit that it should not happen...  But a resource leak is
still a resource leak.

That aside aside, once we have resources in hand the incoming message is
stuffed into the fe_queue_entry_t and stored on the SendQueue:

----
memset(m->metadata, 0, sizeof(message_metadata_t));


qe->msg = m;
qe->client = 0xff;
qe->retries = MAX_RETRIES;

if (call SendQueue.enqueue(qe) == SUCCESS) {
----

and if all goes well then a shiny new message is returned to the caller:

----
memset(newMsg, 0, sizeof(message_t));  // Slightly out of order

// Skipping some code

return newMsg; // Assuming SendQueue.enqueue(qe) == SUCCESS
----

Hope that helps!
-Roy
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to