kopia lustrzana https://github.com/Hamlib/Hamlib
Fix memory leak in rigctld and cleanup debug
rodzic
1dbd633d5a
commit
a401d3ac78
|
@ -473,6 +473,7 @@ static int scanfc(FILE *fin, const char *format, void *p)
|
||||||
{
|
{
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
*(char *)p = 0;
|
||||||
int ret = fscanf(fin, format, p);
|
int ret = fscanf(fin, format, p);
|
||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
@ -482,11 +483,13 @@ static int scanfc(FILE *fin, const char *format, void *p)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
rig_debug(RIG_DEBUG_ERR, "fscanf: %s\n", strerror(errno));
|
if (!feof(fin))
|
||||||
rig_debug(RIG_DEBUG_ERR,
|
{
|
||||||
"fscanf: parsing '%s' with '%s'\n",
|
rig_debug(RIG_DEBUG_ERR,
|
||||||
(char *)p,
|
"fscanf: parsing '%s' with '%s'\n",
|
||||||
format);
|
(char *)p,
|
||||||
|
format);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -618,6 +621,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
||||||
if (interactive)
|
if (interactive)
|
||||||
{
|
{
|
||||||
static int last_was_ret = 1;
|
static int last_was_ret = 1;
|
||||||
|
|
||||||
if (prompt)
|
if (prompt)
|
||||||
{
|
{
|
||||||
fprintf_flush(fout, "\nRig command: ");
|
fprintf_flush(fout, "\nRig command: ");
|
||||||
|
@ -4142,7 +4146,7 @@ declare_proto_rig(send_cmd)
|
||||||
{
|
{
|
||||||
char tmpbuf[64];
|
char tmpbuf[64];
|
||||||
/* text protocol */
|
/* text protocol */
|
||||||
strncpy(bufcmd, arg1, BUFSZ-1);
|
strncpy(bufcmd, arg1, BUFSZ - 1);
|
||||||
strtok(bufcmd, "\0xa\0xd");
|
strtok(bufcmd, "\0xa\0xd");
|
||||||
bufcmd[BUFSZ - 2] = '\0';
|
bufcmd[BUFSZ - 2] = '\0';
|
||||||
cmd_len = strlen(bufcmd);
|
cmd_len = strlen(bufcmd);
|
||||||
|
@ -4245,7 +4249,7 @@ declare_proto_rig(send_cmd)
|
||||||
hexbuf = realloc(hexbuf, hexbufbytes);
|
hexbuf = realloc(hexbuf, hexbufbytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
strncat(hexbuf, hex, hexbufbytes-1);
|
strncat(hexbuf, hex, hexbufbytes - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
rig_debug(RIG_DEBUG_TRACE, "%s: binary=%s, retval=%d\n", __func__, hexbuf,
|
rig_debug(RIG_DEBUG_TRACE, "%s: binary=%s, retval=%d\n", __func__, hexbuf,
|
||||||
|
|
|
@ -585,7 +585,7 @@ int main(int argc, char *argv[])
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (verbose > 0)
|
if (verbose > RIG_DEBUG_ERR)
|
||||||
{
|
{
|
||||||
printf("Opened rig model %d, '%s'\n",
|
printf("Opened rig model %d, '%s'\n",
|
||||||
my_rig->caps->rig_model,
|
my_rig->caps->rig_model,
|
||||||
|
@ -597,7 +597,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
rig_close(my_rig); /* we will reopen for clients */
|
rig_close(my_rig); /* we will reopen for clients */
|
||||||
|
|
||||||
if (verbose > 0)
|
if (verbose > RIG_DEBUG_ERR)
|
||||||
{
|
{
|
||||||
printf("Closed rig model %d, '%s - will reopen for clients'\n",
|
printf("Closed rig model %d, '%s - will reopen for clients'\n",
|
||||||
my_rig->caps->rig_model,
|
my_rig->caps->rig_model,
|
||||||
|
@ -721,7 +721,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
if (listen(sock_listen, 4) < 0)
|
if (listen(sock_listen, 4) < 0)
|
||||||
{
|
{
|
||||||
handle_error(RIG_DEBUG_ERR, "listeningn");
|
handle_error(RIG_DEBUG_ERR, "listening");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -895,8 +895,8 @@ int main(int argc, char *argv[])
|
||||||
void *handle_socket(void *arg)
|
void *handle_socket(void *arg)
|
||||||
{
|
{
|
||||||
struct handle_data *handle_data_arg = (struct handle_data *)arg;
|
struct handle_data *handle_data_arg = (struct handle_data *)arg;
|
||||||
FILE *fsockin;
|
FILE *fsockin = NULL;
|
||||||
FILE *fsockout;
|
FILE *fsockout = NULL;
|
||||||
int retcode = RIG_OK;
|
int retcode = RIG_OK;
|
||||||
char host[NI_MAXHOST];
|
char host[NI_MAXHOST];
|
||||||
char serv[NI_MAXSERV];
|
char serv[NI_MAXSERV];
|
||||||
|
@ -945,7 +945,7 @@ void *handle_socket(void *arg)
|
||||||
{
|
{
|
||||||
retcode = rig_open(my_rig);
|
retcode = rig_open(my_rig);
|
||||||
|
|
||||||
if (RIG_OK == retcode && verbose > 0)
|
if (RIG_OK == retcode && verbose > RIG_DEBUG_ERR)
|
||||||
{
|
{
|
||||||
printf("Opened rig model %d, '%s'\n",
|
printf("Opened rig model %d, '%s'\n",
|
||||||
my_rig->caps->rig_model,
|
my_rig->caps->rig_model,
|
||||||
|
@ -957,7 +957,7 @@ void *handle_socket(void *arg)
|
||||||
#else
|
#else
|
||||||
retcode = rig_open(my_rig);
|
retcode = rig_open(my_rig);
|
||||||
|
|
||||||
if (RIG_OK == retcode && verbose > 0)
|
if (RIG_OK == retcode && verbose > RIG_DEBUG_ERR)
|
||||||
{
|
{
|
||||||
printf("Opened rig model %d, '%s'\n",
|
printf("Opened rig model %d, '%s'\n",
|
||||||
my_rig->caps->rig_model,
|
my_rig->caps->rig_model,
|
||||||
|
@ -979,7 +979,6 @@ void *handle_socket(void *arg)
|
||||||
|
|
||||||
if (retcode == 1)
|
if (retcode == 1)
|
||||||
{
|
{
|
||||||
rig_close(my_rig);
|
|
||||||
retcode = rig_open(my_rig);
|
retcode = rig_open(my_rig);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -993,7 +992,7 @@ void *handle_socket(void *arg)
|
||||||
{
|
{
|
||||||
rig_close(my_rig);
|
rig_close(my_rig);
|
||||||
|
|
||||||
if (verbose > 0)
|
if (verbose > RIG_DEBUG_ERR)
|
||||||
{
|
{
|
||||||
printf("Closed rig model %d, '%s - no clients, will reopen for new clients'\n",
|
printf("Closed rig model %d, '%s - no clients, will reopen for new clients'\n",
|
||||||
my_rig->caps->rig_model,
|
my_rig->caps->rig_model,
|
||||||
|
@ -1005,7 +1004,7 @@ void *handle_socket(void *arg)
|
||||||
#else
|
#else
|
||||||
rig_close(my_rig);
|
rig_close(my_rig);
|
||||||
|
|
||||||
if (verbose > 0)
|
if (verbose > RIG_DEBUG_ERR)
|
||||||
{
|
{
|
||||||
printf("Closed rig model %d, '%s - will reopen for new clients'\n",
|
printf("Closed rig model %d, '%s - will reopen for new clients'\n",
|
||||||
my_rig->caps->rig_model,
|
my_rig->caps->rig_model,
|
||||||
|
@ -1032,24 +1031,26 @@ void *handle_socket(void *arg)
|
||||||
host,
|
host,
|
||||||
serv);
|
serv);
|
||||||
|
|
||||||
retcode = fclose(fsockin);
|
handle_exit:
|
||||||
|
|
||||||
|
// for MINGW we close the handle before fclose
|
||||||
|
#ifdef __MINGW32__
|
||||||
|
retcode = closesocket(handle_data_arg->sock);
|
||||||
|
|
||||||
if (retcode != 0) { rig_debug(RIG_DEBUG_ERR, "%s: fclose(fsockin) %s\n", __func__, strerror(retcode)); }
|
if (retcode != 0) { rig_debug(RIG_DEBUG_ERR, "%s: fclose(fsockin) %s\n", __func__, strerror(retcode)); }
|
||||||
|
|
||||||
|
#endif
|
||||||
|
fclose(fsockin);
|
||||||
|
fclose(fsockout);
|
||||||
|
|
||||||
|
// for everybody else we close the handle after fclose
|
||||||
#ifndef __MINGW32__
|
#ifndef __MINGW32__
|
||||||
rig_debug(RIG_DEBUG_ERR,"%s: fclose(fsockout)\n", __func__);
|
retcode = close(handle_data_arg->sock);
|
||||||
retcode = fclose(fsockout);
|
|
||||||
|
if (retcode != 0) { rig_debug(RIG_DEBUG_ERR, "%s: close(handle_data_arg->sock) %s\n", __func__, strerror(retcode)); }
|
||||||
|
|
||||||
if (retcode != 0) { rig_debug(RIG_DEBUG_ERR, "%s: fclose(fsockout) %s\n", __func__, strerror(retcode)); }
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
handle_exit:
|
|
||||||
#ifdef __MINGW32__
|
|
||||||
shutdown(handle_data_arg->sock, 2);
|
|
||||||
closesocket(handle_data_arg->sock);
|
|
||||||
#else
|
|
||||||
close(handle_data_arg->sock);
|
|
||||||
#endif
|
|
||||||
free(arg);
|
free(arg);
|
||||||
|
|
||||||
#ifdef HAVE_PTHREAD
|
#ifdef HAVE_PTHREAD
|
||||||
|
|
Ładowanie…
Reference in New Issue