int wilc_mq_send(WILC_MsgQueueHandle *pHandle,
const void *pvSendBuffer, u32 u32SendBufferSize)
{
- int result = 0;
unsigned long flags;
Message *pstrMessage = NULL;
if ((!pHandle) || (u32SendBufferSize == 0) || (!pvSendBuffer)) {
PRINT_ER("pHandle or pvSendBuffer is null\n");
- result = -EFAULT;
- goto ERRORHANDLER;
+ return -EFAULT;
}
if (pHandle->bExiting) {
PRINT_ER("pHandle fail\n");
- result = -EFAULT;
- goto ERRORHANDLER;
+ return -EFAULT;
}
- spin_lock_irqsave(&pHandle->strCriticalSection, flags);
-
/* construct a new message */
pstrMessage = kmalloc(sizeof(Message), GFP_ATOMIC);
if (!pstrMessage)
return -ENOMEM;
+
pstrMessage->u32Length = u32SendBufferSize;
pstrMessage->pstrNext = NULL;
pstrMessage->pvBuffer = kmemdup(pvSendBuffer, u32SendBufferSize,
GFP_ATOMIC);
if (!pstrMessage->pvBuffer) {
- result = -ENOMEM;
- goto ERRORHANDLER;
+ kfree(pstrMessage);
+ return -ENOMEM;
}
+ spin_lock_irqsave(&pHandle->strCriticalSection, flags);
+
/* add it to the message queue */
if (!pHandle->pstrMessageList) {
pHandle->pstrMessageList = pstrMessage;
up(&pHandle->hSem);
-ERRORHANDLER:
- /* error occured, free any allocations */
- if (pstrMessage) {
- kfree(pstrMessage->pvBuffer);
- kfree(pstrMessage);
- }
-
- return result;
+ return 0;
}
/*!