TRACE_M("r3964_close - client kfree %x",(int)pClient); 
TRACE_M("r3964_close - client kfree %p",pClient); 
static void r3964_close(struct tty_struct *tty){   struct r3964_info *pInfo=(struct r3964_info*)tty->disc_data;   struct r3964_client_info *pClient, *pNext;   struct r3964_message *pMsg;   struct r3964_block_header *pHeader, *pNextHeader;   unsigned long flags;   TRACE_L("close");    /*     * Make sure that our task queue isn't activated.  If it     * is, take it out of the linked list.     */    del_timer_sync(&pInfo->tmr);   /* Remove client-structs and message queues: */    pClient=pInfo->firstClient;    while(pClient)    {       pNext=pClient->next;       while(pClient->msg_count)       {          pMsg=remove_msg(pInfo, pClient);          if(pMsg)          {             kfree(pMsg);             TRACE_M("r3964_close - msg kfree %x",(int)pMsg);          }       }       kfree(pClient);       TRACE_M("r3964_close - client kfree %x",(int)pClient);       pClient=pNext;    }    /* Remove jobs from tx_queue: */        spin_lock_irqsave(&pInfo->lock, flags);	pHeader=pInfo->tx_first;	pInfo->tx_first=pInfo->tx_last=NULL;	spin_unlock_irqrestore(&pInfo->lock, flags);	    while(pHeader)	{	   pNextHeader=pHeader->next;	   kfree(pHeader);	   pHeader=pNextHeader;	}    /* Free buffers: */    wake_up_interruptible(&pInfo->read_wait);    kfree(pInfo->rx_buf);    TRACE_M("r3964_close - rx_buf kfree %x",(int)pInfo->rx_buf);    kfree(pInfo->tx_buf);    TRACE_M("r3964_close - tx_buf kfree %x",(int)pInfo->tx_buf);    kfree(pInfo);    TRACE_M("r3964_close - info kfree %x",(int)pInfo);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/87e0f3dbd3693bc4583474ab191cbdd5e3d9d0fa/n_r3964.c/clean/drivers/char/n_r3964.c