From 3344d1a728d37f0fb3e82a6a945eee0c780eb734 Mon Sep 17 00:00:00 2001
From: Chernov Dmitriy <cd_work@mail.ru>
Date: 周三, 02 3月 2016 21:29:32 +0800
Subject: [PATCH] Fix potential memory leak. #73

---
 examples/test-LwIP-netconn/scpi_server.c |   74 ++++++++++++++++++-------------------
 1 files changed, 36 insertions(+), 38 deletions(-)

diff --git a/examples/test-LwIP-netconn/scpi_server.c b/examples/test-LwIP-netconn/scpi_server.c
index e6dee56..dff5d7c 100644
--- a/examples/test-LwIP-netconn/scpi_server.c
+++ b/examples/test-LwIP-netconn/scpi_server.c
@@ -2,7 +2,7 @@
  * Copyright (c) 2012-2013 Jan Breuer,
  *
  * All Rights Reserved
- * 
+ *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
  * met:
@@ -11,7 +11,7 @@
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
@@ -28,10 +28,10 @@
 /**
  * @file   scpi_server.c
  * @date   Thu Nov 15 10:58:45 UTC 2012
- * 
+ *
  * @brief  TCP/IP SCPI Server
- * 
- * 
+ *
+ *
  */
 
 #include <stdio.h>
@@ -73,12 +73,11 @@
     //fd_set fds;
 } user_data_t;
 
-struct _queue_event_t
-{
+struct _queue_event_t {
     uint8_t cmd;
     uint8_t param1;
     int16_t param2;
-} __attribute__ ((__packed__));
+} __attribute__((__packed__));
 typedef struct _queue_event_t queue_event_t;
 
 
@@ -92,7 +91,7 @@
 
 size_t SCPI_Write(scpi_t * context, const char * data, size_t len) {
     if (context->user_context != NULL) {
-        user_data_t * u = (user_data_t *)(context->user_context);
+        user_data_t * u = (user_data_t *) (context->user_context);
         if (u->io) {
             return (netconn_write(u->io, data, len, NETCONN_NOCOPY) == ERR_OK) ? len : 0;
         }
@@ -102,7 +101,7 @@
 
 scpi_result_t SCPI_Flush(scpi_t * context) {
     if (context->user_context != NULL) {
-        user_data_t * u = (user_data_t *)(context->user_context);
+        user_data_t * u = (user_data_t *) (context->user_context);
         if (u->io) {
             /* flush not implemented */
             return SCPI_RES_OK;
@@ -116,11 +115,11 @@
     // BEEP
     iprintf("**ERROR: %ld, \"%s\"\r\n", (int32_t) err, SCPI_ErrorTranslate(err));
     if (err != 0) {
-		/* New error */
+        /* New error */
         /* Beep */
-		/* Error LED ON */
+        /* Error LED ON */
     } else {
-		/* No more errors in the queue */
+        /* No more errors in the queue */
         /* Error LED OFF */
     }
     return 0;
@@ -134,20 +133,14 @@
     } else {
         iprintf("**CTRL %02x: 0x%X (%d)\r\n", ctrl, val, val);
     }
-    
+
     if (context->user_context != NULL) {
-        user_data_t * u = (user_data_t *)(context->user_context);
+        user_data_t * u = (user_data_t *) (context->user_context);
         if (u->control_io) {
-            snprintf(b, sizeof(b), "SRQ%d\r\n", val);
+            snprintf(b, sizeof (b), "SRQ%d\r\n", val);
             return netconn_write(u->control_io, b, strlen(b), NETCONN_NOCOPY) == ERR_OK ? SCPI_RES_OK : SCPI_RES_ERR;
         }
     }
-    return SCPI_RES_OK;
-}
-
-scpi_result_t SCPI_Test(scpi_t * context) {
-    (void) context;
-    iprintf("**Test\r\n");
     return SCPI_RES_OK;
 }
 
@@ -162,7 +155,6 @@
     return SCPI_RES_OK;
 }
 
-
 static void setEseReq(void) {
     SCPI_RegSetBits(&scpi_context, SCPI_REG_ESR, ESR_REQ);
 }
@@ -174,14 +166,14 @@
 void SCPI_RequestControl(void) {
     queue_event_t msg;
     msg.cmd = SCPI_MSG_SET_ESE_REQ;
-    
-	/* Avoid sending evtQueue message if ESR_REQ is already set 
-	if((SCPI_RegGet(&scpi_context, SCPI_REG_ESR) & ESR_REQ) == 0) {
-	    xQueueSend(user_data.evtQueue, &msg, 1000);
-	}
-	*/
 
-	xQueueSend(user_data.evtQueue, &msg, 1000);
+    /* Avoid sending evtQueue message if ESR_REQ is already set
+    if((SCPI_RegGet(&scpi_context, SCPI_REG_ESR) & ESR_REQ) == 0) {
+        xQueueSend(user_data.evtQueue, &msg, 1000);
+    }
+     */
+
+    xQueueSend(user_data.evtQueue, &msg, 1000);
 }
 
 void SCPI_AddError(int16_t err) {
@@ -189,7 +181,7 @@
     msg.cmd = SCPI_MSG_SET_ERROR;
     msg.param2 = err;
 
-    xQueueSend(user_data.evtQueue, &msg, 1000); 
+    xQueueSend(user_data.evtQueue, &msg, 1000);
 }
 
 void scpi_netconn_callback(struct netconn * conn, enum netconn_evt evt, u16_t len) {
@@ -356,24 +348,30 @@
 }
 
 /*
- * 
+ *
  */
 static void scpi_server_thread(void *arg) {
     queue_event_t evt;
 
-    (void)arg;
+    (void) arg;
 
-    user_data.evtQueue = xQueueCreate(10, sizeof(queue_event_t));
+    user_data.evtQueue = xQueueCreate(10, sizeof (queue_event_t));
 
     // user_context will be pointer to socket
-    scpi_context.user_context = &user_data;
+    SCPI_Init(&scpi_context,
+            scpi_commands,
+            &scpi_interface,
+            scpi_units_def,
+            SCPI_IDN1, SCPI_IDN2, SCPI_IDN3, SCPI_IDN4,
+            scpi_input_buffer, SCPI_INPUT_BUFFER_LENGTH,
+            scpi_error_queue_data, SCPI_ERROR_QUEUE_SIZE);
 
-    SCPI_Init(&scpi_context);
+    scpi_context.user_context = &user_data;
 
     user_data.io_listen = createServer(DEVICE_PORT);
     user_data.control_io_listen = createServer(CONTROL_PORT);
 
-    while(1) {
+    while (1) {
         waitServer(&user_data, &evt);
 
         if (evt.cmd == SCPI_MSG_TIMEOUT) { // timeout
@@ -399,7 +397,7 @@
         if (evt.cmd == SCPI_MSG_SET_ESE_REQ) {
             setEseReq();
         }
-        
+
         if (evt.cmd == SCPI_MSG_SET_ERROR) {
             setError(evt.param2);
         }

--
Gitblit v1.9.1