瀏覽代碼

Close file descriptor when the settings don't apply in RTU

Original patch provided by Thomas Stalder.
Stéphane Raimbault 14 年之前
父節點
當前提交
c1b5d58583
共有 1 個文件被更改,包括 8 次插入0 次删除
  1. 8 0
      src/modbus-rtu.c

+ 8 - 0
src/modbus-rtu.c

@@ -385,6 +385,8 @@ static int _modbus_rtu_connect(modbus_t *ctx)
     if (!GetCommState(ctx_rtu->w_ser.fd, &ctx_rtu->old_dcb)) {
         fprintf(stderr, "ERROR Error getting configuration (LastError %d)\n",
                 (int)GetLastError());
+        CloseHandle(ctx_rtu->w_ser.fd)
+        ctx_rtu->w_ser.fd = INVALID_HANDLE_VALUE;
         return -1;
     }
 
@@ -487,6 +489,8 @@ static int _modbus_rtu_connect(modbus_t *ctx)
     if (!SetCommState(ctx_rtu->w_ser.fd, &dcb)) {
         fprintf(stderr, "ERROR Error setting new configuration (LastError %d)\n",
                 (int)GetLastError());
+        CloseHandle(ctx_rtu->w_ser.fd)
+        ctx_rtu->w_ser.fd = INVALID_HANDLE_VALUE;
         return -1;
     }
 #else
@@ -558,6 +562,8 @@ static int _modbus_rtu_connect(modbus_t *ctx)
     /* Set the baud rate */
     if ((cfsetispeed(&tios, speed) < 0) ||
         (cfsetospeed(&tios, speed) < 0)) {
+        close(ctx->s);
+        ctx->s = -1;
         return -1;
     }
 
@@ -730,6 +736,8 @@ static int _modbus_rtu_connect(modbus_t *ctx)
     tios.c_cc[VTIME] = 0;
 
     if (tcsetattr(ctx->s, TCSANOW, &tios) < 0) {
+        close(ctx->s);
+        ctx->s = -1;
         return -1;
     }
 #endif