Changed the APDU handler to handle freeing the transactions even when there is a custom handler being used.

This commit is contained in:
skarg
2005-12-17 22:37:16 +00:00
parent 9a9d072e14
commit 1f34710f24
3 changed files with 14 additions and 8 deletions
+3 -4
View File
@@ -270,8 +270,7 @@ void apdu_handler(
src, src,
invoke_id); invoke_id);
} }
else tsm_free_invoke_id(invoke_id);
tsm_free_invoke_id(invoke_id);
break; break;
default: default:
break; break;
@@ -319,8 +318,7 @@ void apdu_handler(
src, src,
&service_ack_data); &service_ack_data);
} }
else tsm_free_invoke_id(invoke_id);
tsm_free_invoke_id(invoke_id);
break; break;
default: default:
break; break;
@@ -331,6 +329,7 @@ void apdu_handler(
case PDU_TYPE_REJECT: case PDU_TYPE_REJECT:
case PDU_TYPE_ABORT: case PDU_TYPE_ABORT:
invoke_id = apdu[1]; invoke_id = apdu[1];
/* FIXME: what about a way to let a client know? */
tsm_free_invoke_id(invoke_id); tsm_free_invoke_id(invoke_id);
break; break;
default: default:
-4
View File
@@ -344,7 +344,6 @@ void ReadPropertyAckHandler(
BACNET_READ_PROPERTY_DATA data; BACNET_READ_PROPERTY_DATA data;
(void)src; (void)src;
tsm_free_invoke_id(service_data->invoke_id);
len = rp_ack_decode_service_request( len = rp_ack_decode_service_request(
service_request, service_request,
service_len, service_len,
@@ -558,7 +557,6 @@ void ReadPropertyHandler(
return; return;
} }
void WritePropertyAckHandler( void WritePropertyAckHandler(
uint8_t *service_request, uint8_t *service_request,
uint16_t service_len, uint16_t service_len,
@@ -569,7 +567,6 @@ void WritePropertyAckHandler(
BACNET_WRITE_PROPERTY_DATA data; BACNET_WRITE_PROPERTY_DATA data;
(void)src; (void)src;
tsm_free_invoke_id(service_data->invoke_id);
len = wp_ack_decode_service_request( len = wp_ack_decode_service_request(
service_request, service_request,
service_len, service_len,
@@ -846,7 +843,6 @@ void AtomicReadFileAckHandler(
(void)src; (void)src;
// get the file instance from the tsm data before freeing it // get the file instance from the tsm data before freeing it
instance = bacfile_instance_from_tsm(service_data->invoke_id); instance = bacfile_instance_from_tsm(service_data->invoke_id);
tsm_free_invoke_id(service_data->invoke_id);
len = arf_ack_decode_service_request( len = arf_ack_decode_service_request(
service_request, service_request,
service_len, service_len,
+11
View File
@@ -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) static void sig_handler(int signo)
{ {
datalink_cleanup(); datalink_cleanup();
print_address_cache(); print_address_cache();
print_tsm_stats();
exit(0); exit(0);
} }