Server - Fixed leaked file handles in both itemdb and modbus
authorJohn Hodge <[email protected]>
Fri, 13 Dec 2013 13:07:48 +0000 (21:07 +0800)
committerJohn Hodge <[email protected]>
Fri, 13 Dec 2013 13:07:48 +0000 (21:07 +0800)
- Also improved logging in coke handler

src/server/common.h
src/server/handler_coke.c
src/server/itemdb.c
src/server/server.c

index 7ad01c5..74c42d9 100644 (file)
@@ -96,8 +96,12 @@ extern int   DispenseDonate(int ActualUser, int User, int Ammount, const char *Rea
 extern int     DispenseUpdateItem(int User, tItem *Item, const char *NewName, int NewPrice);
 
 // --- Logging ---
+// to syslog
 extern void    Log_Error(const char *Format, ...);
 extern void    Log_Info(const char *Format, ...);
+// To stdout
+#define Debug_Notice(msg, v...)        fprintf(stderr, "%08llun: "msg"\n", (unsigned long long)time(NULL) ,##v)
+#define Debug_Debug(msg, v...) fprintf(stderr, "%08llud: "msg"\n", (unsigned long long)time(NULL) ,##v)
 
 // --- Config Database ---
 extern void    Config_ParseFile(const char *Filename);
index 6908aec..ff051c8 100644 (file)
@@ -107,9 +107,9 @@ int Coke_DoDispense(int UNUSED(User), int Item)
        if( time(NULL) - gtCoke_LastDispenseTime < ciCoke_MinPeriod )
        {
                 int    delay = ciCoke_MinPeriod - (time(NULL) - gtCoke_LastDispenseTime);
-               printf("Wait %i seconds?\n", delay);
+               Debug_Debug("Waiting for %i seconds (rate limit)", delay);
                sleep( delay );
-               printf("wait done\n");
+               Debug_Debug("wait done");
        }
        gtCoke_LastDispenseTime = time(NULL);
 
@@ -133,8 +133,11 @@ int Coke_int_ConnectToPLC(void)
                        return 1;
                }
        }
-       printf("Connecting to coke PLC machine on '%s'\n", gsCoke_ModbusAddress);
-       fprintf(stderr, "Connecting to coke PLC machine on '%s'\n", gsCoke_ModbusAddress);
+       else {
+               // Preven resource leaks
+               modbus_close(gCoke_Modbus);
+       }
+       Debug_Notice("Connecting to coke PLC machine on '%s'\n", gsCoke_ModbusAddress);
        
        if( modbus_connect(gCoke_Modbus) )
        {
@@ -227,7 +230,8 @@ int Coke_int_DropSlot(int Slot)
        if( res == 0 )
        {
                // Oops!, no drink
-               printf("Drink dispense failed, bit lowered too quickly\n");
+               Log_Error("Drink dispense failed, bit lowered too quickly");
+               Debug_Notice("Drink dispense failed, bit lowered too quickly");
                return 1;
        }
        
@@ -255,6 +259,7 @@ int _WriteBit(int BitNum, uint8_t Value)
                return -1;
        if( modbus_write_bit( gCoke_Modbus, BitNum, Value != 0 ) >= 0 )
                return 0;
+       // Error case
        if( Coke_int_ConnectToPLC() )
                return -1;
        if( modbus_write_bit( gCoke_Modbus, BitNum, Value != 0 ) >= 0 )
index 632eb50..06c8257 100644 (file)
@@ -223,6 +223,7 @@ void Items_ReadFromFile(void)
                free(gaItems);
                gaItems = NULL;
        }
+       fclose(fp);
        
        // Replace with new
        giNumItems = numItems;
index 6077b9b..e76c459 100644 (file)
@@ -28,9 +28,6 @@
 
 #define PIDFILE        "/var/run/dispsrv.pid"
 
-#define Debug_Notice(msg, v...)        printf("%08llun: "msg"\n", (unsigned long long)time(NULL) ,##v)
-#define Debug_Debug(msg, v...) printf("%08llud: "msg"\n", (unsigned long long)time(NULL) ,##v)
-
 // Statistics
 #define MAX_CONNECTION_QUEUE   5
 #define INPUT_BUFFER_SIZE      256

UCC git Repository :: git.ucc.asn.au