siglent-sds: free memory that was allocated by SCPI get routines
The SCPI get routines may allocate memory for response data which callers have to free after use. The implemented approach is modelled after pull request 114 by Matti Eiden, to get the leak fixes in while the PR is queued. This addresses part of bug #1683. Submitted-By: Matti Eiden <snaipperi@gmail.com>
This commit is contained in:
parent
4da62209dd
commit
70158398f3
|
@ -75,6 +75,7 @@ static int siglent_sds_event_wait(const struct sr_dev_inst *sdi)
|
||||||
if (sr_scpi_get_string(sdi->conn, ":INR?", &buf) != SR_OK)
|
if (sr_scpi_get_string(sdi->conn, ":INR?", &buf) != SR_OK)
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
sr_atoi(buf, &out);
|
sr_atoi(buf, &out);
|
||||||
|
g_free(buf);
|
||||||
g_usleep(s);
|
g_usleep(s);
|
||||||
} while (out == 0);
|
} while (out == 0);
|
||||||
|
|
||||||
|
@ -100,6 +101,7 @@ static int siglent_sds_event_wait(const struct sr_dev_inst *sdi)
|
||||||
if (sr_scpi_get_string(sdi->conn, ":INR?", &buf) != SR_OK)
|
if (sr_scpi_get_string(sdi->conn, ":INR?", &buf) != SR_OK)
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
sr_atoi(buf, &out);
|
sr_atoi(buf, &out);
|
||||||
|
g_free(buf);
|
||||||
g_usleep(s);
|
g_usleep(s);
|
||||||
/* XXX
|
/* XXX
|
||||||
* Now this loop condition looks suspicious! A bitwise
|
* Now this loop condition looks suspicious! A bitwise
|
||||||
|
@ -168,6 +170,7 @@ SR_PRIV int siglent_sds_capture_start(const struct sr_dev_inst *sdi)
|
||||||
if (sr_scpi_get_string(sdi->conn, ":INR?", &buf) != SR_OK)
|
if (sr_scpi_get_string(sdi->conn, ":INR?", &buf) != SR_OK)
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
sr_atoi(buf, &out);
|
sr_atoi(buf, &out);
|
||||||
|
g_free(buf);
|
||||||
if (out == DEVICE_STATE_TRIG_RDY) {
|
if (out == DEVICE_STATE_TRIG_RDY) {
|
||||||
siglent_sds_set_wait_event(devc, WAIT_TRIGGER);
|
siglent_sds_set_wait_event(devc, WAIT_TRIGGER);
|
||||||
} else if (out == DEVICE_STATE_DATA_TRIG_RDY) {
|
} else if (out == DEVICE_STATE_DATA_TRIG_RDY) {
|
||||||
|
@ -217,6 +220,7 @@ SR_PRIV int siglent_sds_capture_start(const struct sr_dev_inst *sdi)
|
||||||
if (sr_scpi_get_string(sdi->conn, ":INR?", &buf) != SR_OK)
|
if (sr_scpi_get_string(sdi->conn, ":INR?", &buf) != SR_OK)
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
sr_atoi(buf, &out);
|
sr_atoi(buf, &out);
|
||||||
|
g_free(buf);
|
||||||
if (out == DEVICE_STATE_TRIG_RDY) {
|
if (out == DEVICE_STATE_TRIG_RDY) {
|
||||||
siglent_sds_set_wait_event(devc, WAIT_TRIGGER);
|
siglent_sds_set_wait_event(devc, WAIT_TRIGGER);
|
||||||
} else if (out == DEVICE_STATE_DATA_TRIG_RDY) {
|
} else if (out == DEVICE_STATE_DATA_TRIG_RDY) {
|
||||||
|
@ -760,6 +764,8 @@ SR_PRIV int siglent_sds_get_dev_cfg(const struct sr_dev_inst *sdi)
|
||||||
/* Coupling. */
|
/* Coupling. */
|
||||||
for (i = 0; i < devc->model->analog_channels; i++) {
|
for (i = 0; i < devc->model->analog_channels; i++) {
|
||||||
cmd = g_strdup_printf("C%d:CPL?", i + 1);
|
cmd = g_strdup_printf("C%d:CPL?", i + 1);
|
||||||
|
g_free(devc->coupling[i]);
|
||||||
|
devc->coupling[i] = NULL;
|
||||||
res = sr_scpi_get_string(sdi->conn, cmd, &devc->coupling[i]);
|
res = sr_scpi_get_string(sdi->conn, cmd, &devc->coupling[i]);
|
||||||
g_free(cmd);
|
g_free(cmd);
|
||||||
if (res != SR_OK)
|
if (res != SR_OK)
|
||||||
|
@ -813,6 +819,8 @@ SR_PRIV int siglent_sds_get_dev_cfg(const struct sr_dev_inst *sdi)
|
||||||
|
|
||||||
/* Trigger slope. */
|
/* Trigger slope. */
|
||||||
cmd = g_strdup_printf("%s:TRSL?", devc->trigger_source);
|
cmd = g_strdup_printf("%s:TRSL?", devc->trigger_source);
|
||||||
|
g_free(devc->trigger_slope);
|
||||||
|
devc->trigger_slope = NULL;
|
||||||
res = sr_scpi_get_string(sdi->conn, cmd, &devc->trigger_slope);
|
res = sr_scpi_get_string(sdi->conn, cmd, &devc->trigger_slope);
|
||||||
g_free(cmd);
|
g_free(cmd);
|
||||||
if (res != SR_OK)
|
if (res != SR_OK)
|
||||||
|
@ -886,12 +894,15 @@ SR_PRIV int siglent_sds_get_dev_cfg_horizontal(const struct sr_dev_inst *sdi)
|
||||||
g_free(cmd);
|
g_free(cmd);
|
||||||
samplerate_scope = 0;
|
samplerate_scope = 0;
|
||||||
fvalue = 0;
|
fvalue = 0;
|
||||||
if (res != SR_OK)
|
if (res != SR_OK) {
|
||||||
|
g_free(sample_points_string);
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
|
}
|
||||||
if (g_strstr_len(sample_points_string, -1, "Mpts") != NULL) {
|
if (g_strstr_len(sample_points_string, -1, "Mpts") != NULL) {
|
||||||
sample_points_string[strlen(sample_points_string) - 4] = '\0';
|
sample_points_string[strlen(sample_points_string) - 4] = '\0';
|
||||||
if (sr_atof_ascii(sample_points_string, &fvalue) != SR_OK) {
|
if (sr_atof_ascii(sample_points_string, &fvalue) != SR_OK) {
|
||||||
sr_dbg("Invalid float converted from scope response.");
|
sr_dbg("Invalid float converted from scope response.");
|
||||||
|
g_free(sample_points_string);
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
}
|
}
|
||||||
samplerate_scope = fvalue * 1000000;
|
samplerate_scope = fvalue * 1000000;
|
||||||
|
@ -899,6 +910,7 @@ SR_PRIV int siglent_sds_get_dev_cfg_horizontal(const struct sr_dev_inst *sdi)
|
||||||
sample_points_string[strlen(sample_points_string) - 4] = '\0';
|
sample_points_string[strlen(sample_points_string) - 4] = '\0';
|
||||||
if (sr_atof_ascii(sample_points_string, &fvalue) != SR_OK) {
|
if (sr_atof_ascii(sample_points_string, &fvalue) != SR_OK) {
|
||||||
sr_dbg("Invalid float converted from scope response.");
|
sr_dbg("Invalid float converted from scope response.");
|
||||||
|
g_free(sample_points_string);
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
}
|
}
|
||||||
samplerate_scope = fvalue * 10000;
|
samplerate_scope = fvalue * 10000;
|
||||||
|
|
Loading…
Reference in New Issue