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