Separate mqueue allocation logic from mq_open() and put it in sched/mqueue/mq_msgqalloc.c

This commit is contained in:
Gregory Nutt
2014-09-29 14:09:31 -06:00
parent b0f80cc8db
commit 9e975a217d
9 changed files with 102 additions and 96 deletions
+14 -14
View File
@@ -90,15 +90,15 @@ enum mqalloc_e
struct mqueue_msg_s
{
FAR struct mqmsg *next; /* Forward link to next message */
uint8_t type; /* (Used to manage allocations) */
uint8_t priority; /* priority of message */
FAR struct mqueue_msg_s *next; /* Forward link to next message */
uint8_t type; /* (Used to manage allocations) */
uint8_t priority; /* priority of message */
#if MQ_MAX_BYTES < 256
uint8_t msglen; /* Message data length */
uint8_t msglen; /* Message data length */
#else
uint16_t msglen; /* Message data length */
uint16_t msglen; /* Message data length */
#endif
uint8_t mail[MQ_MAX_BYTES]; /* Message data */
uint8_t mail[MQ_MAX_BYTES]; /* Message data */
};
/****************************************************************************
@@ -141,10 +141,10 @@ EXTERN sq_queue_t g_desfree;
void weak_function mq_initialize(void);
void mq_desblockalloc(void);
mqd_t mq_descreate(FAR struct tcb_s* mtcb, FAR msgq_t* msgq, int oflags);
FAR msgq_t *mq_findnamed(const char *mq_name);
mqd_t mq_descreate(FAR struct tcb_s* mtcb, FAR struct mqueue_inode_s* msgq,
int oflags);
FAR struct mqueue_inode_s *mq_findnamed(FAR const char *mq_name);
void mq_msgfree(FAR struct mqueue_msg_s *mqmsg);
void mq_msgqfree(FAR msgq_t *msgq);
/* mq_waitirq.c ************************************************************/
@@ -154,16 +154,16 @@ void mq_waitirq(FAR struct tcb_s *wtcb, int errcode);
int mq_verifyreceive(mqd_t mqdes, void *msg, size_t msglen);
FAR struct mqueue_msg_s *mq_waitreceive(mqd_t mqdes);
ssize_t mq_doreceive(mqd_t mqdes, struct mqueue_msg_s *mqmsg, void *ubuffer,
int *prio);
ssize_t mq_doreceive(mqd_t mqdes, FAR struct mqueue_msg_s *mqmsg,
FAR void *ubuffer, FAR int *prio);
/* mq_sndinternal.c ********************************************************/
int mq_verifysend(mqd_t mqdes, const void *msg, size_t msglen, int prio);
int mq_verifysend(mqd_t mqdes, FAR const void *msg, size_t msglen, int prio);
FAR struct mqueue_msg_s *mq_msgalloc(void);
int mq_waitsend(mqd_t mqdes);
int mq_dosend(mqd_t mqdes, FAR struct mqueue_msg_s *mqmsg, const void *msg,
size_t msglen, int prio);
int mq_dosend(mqd_t mqdes, FAR struct mqueue_msg_s *mqmsg,
FAR const void *msg, size_t msglen, int prio);
/* mq_release.c ************************************************************/