Changed the APDU handler to handle freeing the transactions even when there is a custom handler being used.
This commit is contained in:
+3
-4
@@ -270,8 +270,7 @@ void apdu_handler(
|
||||
src,
|
||||
invoke_id);
|
||||
}
|
||||
else
|
||||
tsm_free_invoke_id(invoke_id);
|
||||
tsm_free_invoke_id(invoke_id);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -319,8 +318,7 @@ void apdu_handler(
|
||||
src,
|
||||
&service_ack_data);
|
||||
}
|
||||
else
|
||||
tsm_free_invoke_id(invoke_id);
|
||||
tsm_free_invoke_id(invoke_id);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -331,6 +329,7 @@ void apdu_handler(
|
||||
case PDU_TYPE_REJECT:
|
||||
case PDU_TYPE_ABORT:
|
||||
invoke_id = apdu[1];
|
||||
/* FIXME: what about a way to let a client know? */
|
||||
tsm_free_invoke_id(invoke_id);
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -344,7 +344,6 @@ void ReadPropertyAckHandler(
|
||||
BACNET_READ_PROPERTY_DATA data;
|
||||
|
||||
(void)src;
|
||||
tsm_free_invoke_id(service_data->invoke_id);
|
||||
len = rp_ack_decode_service_request(
|
||||
service_request,
|
||||
service_len,
|
||||
@@ -558,7 +557,6 @@ void ReadPropertyHandler(
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
void WritePropertyAckHandler(
|
||||
uint8_t *service_request,
|
||||
uint16_t service_len,
|
||||
@@ -569,7 +567,6 @@ void WritePropertyAckHandler(
|
||||
BACNET_WRITE_PROPERTY_DATA data;
|
||||
|
||||
(void)src;
|
||||
tsm_free_invoke_id(service_data->invoke_id);
|
||||
len = wp_ack_decode_service_request(
|
||||
service_request,
|
||||
service_len,
|
||||
@@ -846,7 +843,6 @@ void AtomicReadFileAckHandler(
|
||||
(void)src;
|
||||
// get the file instance from the tsm data before freeing it
|
||||
instance = bacfile_instance_from_tsm(service_data->invoke_id);
|
||||
tsm_free_invoke_id(service_data->invoke_id);
|
||||
len = arf_ack_decode_service_request(
|
||||
service_request,
|
||||
service_len,
|
||||
|
||||
@@ -242,10 +242,21 @@ static void print_address_cache(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void print_tsm_stats(void)
|
||||
{
|
||||
int idle = 0;
|
||||
int total = 0;
|
||||
|
||||
idle = tsm_transaction_idle_count();
|
||||
total = MAX_TSM_TRANSACTIONS;
|
||||
fprintf(stderr,"TSM: %d idle of %d transactions\n",idle,total);
|
||||
}
|
||||
|
||||
static void sig_handler(int signo)
|
||||
{
|
||||
datalink_cleanup();
|
||||
print_address_cache();
|
||||
print_tsm_stats();
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user