fix memory leaks (#5050)
This commit is contained in:
parent
ad850ce0a9
commit
59fd83b731
1
.gitignore
vendored
1
.gitignore
vendored
@ -84,3 +84,4 @@ doc/manual/manual.toc
|
||||
doc/manual/manual.tp
|
||||
doc/manual/manual.vr
|
||||
contrib/taler-exchange.tag
|
||||
doxygen-doc/
|
||||
|
@ -13,6 +13,8 @@ ACLOCAL_AMFLAGS = -I m4
|
||||
EXTRA_DIST = \
|
||||
AUTHORS \
|
||||
contrib/coverage.sh \
|
||||
contrib/gnunet.tag \
|
||||
contrib/microhttpd.tag \
|
||||
Doxyfile
|
||||
|
||||
app:
|
||||
|
@ -361,6 +361,7 @@ handle_admin_add_incoming (struct TALER_FAKEBANK_Handle *h,
|
||||
(json_int_t) t->serial_id);
|
||||
json_str = json_dumps (json,
|
||||
JSON_INDENT(2));
|
||||
json_decref (json);
|
||||
if (NULL == json_str)
|
||||
{
|
||||
GNUNET_break (0);
|
||||
|
@ -409,11 +409,42 @@ parse_reserve_history (struct TALER_EXCHANGE_Handle *exchange,
|
||||
GNUNET_break_op (0);
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
|
||||
return GNUNET_OK;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Free memory (potentially) allocated by #parse_reserve_history().
|
||||
*
|
||||
* @param rhistory result to free
|
||||
* @param len number of entries in @a rhistory
|
||||
*/
|
||||
static void
|
||||
free_rhistory (struct TALER_EXCHANGE_ReserveHistory *rhistory,
|
||||
unsigned int len)
|
||||
{
|
||||
for (unsigned int i=0;i<len;i++)
|
||||
{
|
||||
switch (rhistory[i].type)
|
||||
{
|
||||
case TALER_EXCHANGE_RTT_DEPOSIT:
|
||||
GNUNET_free_non_null (rhistory[i].details.in_details.wire_reference);
|
||||
if (NULL != rhistory[i].details.in_details.sender_account_details)
|
||||
json_decref (rhistory[i].details.in_details.sender_account_details);
|
||||
break;
|
||||
case TALER_EXCHANGE_RTT_WITHDRAWAL:
|
||||
break;
|
||||
case TALER_EXCHANGE_RTT_PAYBACK:
|
||||
break;
|
||||
case TALER_EXCHANGE_RTT_CLOSE:
|
||||
if (NULL != rhistory[i].details.close_details.receiver_account_details)
|
||||
json_decref (rhistory[i].details.close_details.receiver_account_details);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Function called when we're done processing the
|
||||
* HTTP /reserve/status request.
|
||||
@ -468,6 +499,7 @@ handle_reserve_status_finished (void *cls,
|
||||
{
|
||||
struct TALER_EXCHANGE_ReserveHistory rhistory[len];
|
||||
|
||||
memset (rhistory, 0, sizeof (rhistory));
|
||||
if (GNUNET_OK !=
|
||||
parse_reserve_history (rsh->exchange,
|
||||
history,
|
||||
@ -479,25 +511,29 @@ handle_reserve_status_finished (void *cls,
|
||||
{
|
||||
GNUNET_break_op (0);
|
||||
response_code = 0;
|
||||
break;
|
||||
}
|
||||
if (0 !=
|
||||
TALER_amount_cmp (&balance_from_history,
|
||||
&balance))
|
||||
if ( (0 != response_code) &&
|
||||
(0 !=
|
||||
TALER_amount_cmp (&balance_from_history,
|
||||
&balance)) )
|
||||
{
|
||||
/* exchange cannot add up balances!? */
|
||||
GNUNET_break_op (0);
|
||||
response_code = 0;
|
||||
break;
|
||||
}
|
||||
rsh->cb (rsh->cb_cls,
|
||||
response_code,
|
||||
TALER_EC_NONE,
|
||||
json,
|
||||
&balance,
|
||||
len,
|
||||
rhistory);
|
||||
rsh->cb = NULL;
|
||||
if (0 != response_code)
|
||||
{
|
||||
rsh->cb (rsh->cb_cls,
|
||||
response_code,
|
||||
TALER_EC_NONE,
|
||||
json,
|
||||
&balance,
|
||||
len,
|
||||
rhistory);
|
||||
rsh->cb = NULL;
|
||||
}
|
||||
free_rhistory (rhistory,
|
||||
len);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -796,8 +832,12 @@ reserve_withdraw_payment_required (struct TALER_EXCHANGE_ReserveWithdrawHandle *
|
||||
rhistory))
|
||||
{
|
||||
GNUNET_break_op (0);
|
||||
free_rhistory (rhistory,
|
||||
len);
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
free_rhistory (rhistory,
|
||||
len);
|
||||
}
|
||||
|
||||
if (0 !=
|
||||
|
Loading…
Reference in New Issue
Block a user