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,
|
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:
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user