Plug memory leaks.
Found with: valgrind MFC after: 3 days
This commit is contained in:
parent
2964aeb34a
commit
584a9bc3f8
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=214274
@ -264,6 +264,7 @@ control_statement: CONTROL STR
|
|||||||
sizeof(depth0_control)) >=
|
sizeof(depth0_control)) >=
|
||||||
sizeof(depth0_control)) {
|
sizeof(depth0_control)) {
|
||||||
pjdlog_error("control argument is too long.");
|
pjdlog_error("control argument is too long.");
|
||||||
|
free($2);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -274,12 +275,14 @@ control_statement: CONTROL STR
|
|||||||
sizeof(lconfig->hc_controladdr)) >=
|
sizeof(lconfig->hc_controladdr)) >=
|
||||||
sizeof(lconfig->hc_controladdr)) {
|
sizeof(lconfig->hc_controladdr)) {
|
||||||
pjdlog_error("control argument is too long.");
|
pjdlog_error("control argument is too long.");
|
||||||
|
free($2);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
assert(!"control at wrong depth level");
|
assert(!"control at wrong depth level");
|
||||||
}
|
}
|
||||||
|
free($2);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -291,6 +294,7 @@ listen_statement: LISTEN STR
|
|||||||
sizeof(depth0_listen)) >=
|
sizeof(depth0_listen)) >=
|
||||||
sizeof(depth0_listen)) {
|
sizeof(depth0_listen)) {
|
||||||
pjdlog_error("listen argument is too long.");
|
pjdlog_error("listen argument is too long.");
|
||||||
|
free($2);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -301,12 +305,14 @@ listen_statement: LISTEN STR
|
|||||||
sizeof(lconfig->hc_listenaddr)) >=
|
sizeof(lconfig->hc_listenaddr)) >=
|
||||||
sizeof(lconfig->hc_listenaddr)) {
|
sizeof(lconfig->hc_listenaddr)) {
|
||||||
pjdlog_error("listen argument is too long.");
|
pjdlog_error("listen argument is too long.");
|
||||||
|
free($2);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
assert(!"listen at wrong depth level");
|
assert(!"listen at wrong depth level");
|
||||||
}
|
}
|
||||||
|
free($2);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -357,6 +363,7 @@ exec_statement: EXEC STR
|
|||||||
if (strlcpy(depth0_exec, $2, sizeof(depth0_exec)) >=
|
if (strlcpy(depth0_exec, $2, sizeof(depth0_exec)) >=
|
||||||
sizeof(depth0_exec)) {
|
sizeof(depth0_exec)) {
|
||||||
pjdlog_error("Exec path is too long.");
|
pjdlog_error("Exec path is too long.");
|
||||||
|
free($2);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -367,12 +374,14 @@ exec_statement: EXEC STR
|
|||||||
sizeof(curres->hr_exec)) >=
|
sizeof(curres->hr_exec)) >=
|
||||||
sizeof(curres->hr_exec)) {
|
sizeof(curres->hr_exec)) {
|
||||||
pjdlog_error("Exec path is too long.");
|
pjdlog_error("Exec path is too long.");
|
||||||
|
free($2);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
assert(!"exec at wrong depth level");
|
assert(!"exec at wrong depth level");
|
||||||
}
|
}
|
||||||
|
free($2);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -386,6 +395,7 @@ node_start: STR
|
|||||||
{
|
{
|
||||||
switch (isitme($1)) {
|
switch (isitme($1)) {
|
||||||
case -1:
|
case -1:
|
||||||
|
free($1);
|
||||||
return (1);
|
return (1);
|
||||||
case 0:
|
case 0:
|
||||||
break;
|
break;
|
||||||
@ -395,6 +405,7 @@ node_start: STR
|
|||||||
default:
|
default:
|
||||||
assert(!"invalid isitme() return value");
|
assert(!"invalid isitme() return value");
|
||||||
}
|
}
|
||||||
|
free($1);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -482,14 +493,17 @@ resource_start: STR
|
|||||||
curres = calloc(1, sizeof(*curres));
|
curres = calloc(1, sizeof(*curres));
|
||||||
if (curres == NULL) {
|
if (curres == NULL) {
|
||||||
pjdlog_error("Unable to allocate memory for resource.");
|
pjdlog_error("Unable to allocate memory for resource.");
|
||||||
|
free($1);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
if (strlcpy(curres->hr_name, $1,
|
if (strlcpy(curres->hr_name, $1,
|
||||||
sizeof(curres->hr_name)) >=
|
sizeof(curres->hr_name)) >=
|
||||||
sizeof(curres->hr_name)) {
|
sizeof(curres->hr_name)) {
|
||||||
pjdlog_error("Resource name is too long.");
|
pjdlog_error("Resource name is too long.");
|
||||||
|
free($1);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
free($1);
|
||||||
curres->hr_role = HAST_ROLE_INIT;
|
curres->hr_role = HAST_ROLE_INIT;
|
||||||
curres->hr_previous_role = HAST_ROLE_INIT;
|
curres->hr_previous_role = HAST_ROLE_INIT;
|
||||||
curres->hr_replication = -1;
|
curres->hr_replication = -1;
|
||||||
@ -530,6 +544,7 @@ name_statement: NAME STR
|
|||||||
sizeof(depth1_provname)) >=
|
sizeof(depth1_provname)) >=
|
||||||
sizeof(depth1_provname)) {
|
sizeof(depth1_provname)) {
|
||||||
pjdlog_error("name argument is too long.");
|
pjdlog_error("name argument is too long.");
|
||||||
|
free($2);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -541,12 +556,14 @@ name_statement: NAME STR
|
|||||||
sizeof(curres->hr_provname)) >=
|
sizeof(curres->hr_provname)) >=
|
||||||
sizeof(curres->hr_provname)) {
|
sizeof(curres->hr_provname)) {
|
||||||
pjdlog_error("name argument is too long.");
|
pjdlog_error("name argument is too long.");
|
||||||
|
free($2);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
assert(!"name at wrong depth level");
|
assert(!"name at wrong depth level");
|
||||||
}
|
}
|
||||||
|
free($2);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -558,6 +575,7 @@ local_statement: LOCAL STR
|
|||||||
sizeof(depth1_localpath)) >=
|
sizeof(depth1_localpath)) >=
|
||||||
sizeof(depth1_localpath)) {
|
sizeof(depth1_localpath)) {
|
||||||
pjdlog_error("local argument is too long.");
|
pjdlog_error("local argument is too long.");
|
||||||
|
free($2);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -569,12 +587,14 @@ local_statement: LOCAL STR
|
|||||||
sizeof(curres->hr_localpath)) >=
|
sizeof(curres->hr_localpath)) >=
|
||||||
sizeof(curres->hr_localpath)) {
|
sizeof(curres->hr_localpath)) {
|
||||||
pjdlog_error("local argument is too long.");
|
pjdlog_error("local argument is too long.");
|
||||||
|
free($2);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
assert(!"local at wrong depth level");
|
assert(!"local at wrong depth level");
|
||||||
}
|
}
|
||||||
|
free($2);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -589,6 +609,7 @@ resource_node_start: STR
|
|||||||
if (curres != NULL) {
|
if (curres != NULL) {
|
||||||
switch (isitme($1)) {
|
switch (isitme($1)) {
|
||||||
case -1:
|
case -1:
|
||||||
|
free($1);
|
||||||
return (1);
|
return (1);
|
||||||
case 0:
|
case 0:
|
||||||
break;
|
break;
|
||||||
@ -599,6 +620,7 @@ resource_node_start: STR
|
|||||||
assert(!"invalid isitme() return value");
|
assert(!"invalid isitme() return value");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
free($1);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -624,8 +646,10 @@ remote_statement: REMOTE STR
|
|||||||
sizeof(curres->hr_remoteaddr)) >=
|
sizeof(curres->hr_remoteaddr)) >=
|
||||||
sizeof(curres->hr_remoteaddr)) {
|
sizeof(curres->hr_remoteaddr)) {
|
||||||
pjdlog_error("remote argument is too long.");
|
pjdlog_error("remote argument is too long.");
|
||||||
|
free($2);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
free($2);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
@ -646,6 +646,7 @@ init_remote(struct hast_resource *res, struct proto_conn **inp,
|
|||||||
*/
|
*/
|
||||||
(void)hast_activemap_flush(res);
|
(void)hast_activemap_flush(res);
|
||||||
}
|
}
|
||||||
|
nv_free(nvin);
|
||||||
pjdlog_info("Connected to %s.", res->hr_remoteaddr);
|
pjdlog_info("Connected to %s.", res->hr_remoteaddr);
|
||||||
if (inp != NULL && outp != NULL) {
|
if (inp != NULL && outp != NULL) {
|
||||||
*inp = in;
|
*inp = in;
|
||||||
|
@ -140,6 +140,8 @@ cv_init(pthread_cond_t *cv)
|
|||||||
assert(error == 0);
|
assert(error == 0);
|
||||||
error = pthread_cond_init(cv, &attr);
|
error = pthread_cond_init(cv, &attr);
|
||||||
assert(error == 0);
|
assert(error == 0);
|
||||||
|
error = pthread_condattr_destroy(&attr);
|
||||||
|
assert(error == 0);
|
||||||
}
|
}
|
||||||
static __inline void
|
static __inline void
|
||||||
cv_wait(pthread_cond_t *cv, pthread_mutex_t *lock)
|
cv_wait(pthread_cond_t *cv, pthread_mutex_t *lock)
|
||||||
|
Loading…
Reference in New Issue
Block a user