Преглед изворни кода

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

Original patch provided by Thomas Stalder.
Stéphane Raimbault пре 14 година
родитељ
комит
8a0e522b47
1 измењених фајлова са 8 додато и 0 уклоњено
  1. 8 0
      src/modbus-rtu.c

+ 8 - 0
src/modbus-rtu.c

@@ -351,6 +351,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;
     }
 
@@ -453,6 +455,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
@@ -524,6 +528,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;
     }
 
@@ -696,6 +702,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