File indexing completed on 2025-05-11 08:24:21
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037 #undef __STRICT_ANSI__
0038
0039 #include "t-test-rtems.h"
0040
0041 #include <rtems/test.h>
0042
0043 #include <rtems/posix/keyimpl.h>
0044
0045 static Objects_Maximum T_posix_key_count;
0046
0047 static ssize_t T_posix_key_value_count;
0048
0049 static POSIX_Keys_Control *
0050 T_get_next_posix_key(Objects_Id *id)
0051 {
0052 return (POSIX_Keys_Control *)
0053 _Objects_Get_next(*id, &_POSIX_Keys_Information, id);
0054 }
0055
0056 static ssize_t
0057 T_get_active_posix_key_value_pairs(void)
0058 {
0059 ssize_t count;
0060 Objects_Id id;
0061 POSIX_Keys_Control *the_key;
0062
0063 count = 0;
0064 id = OBJECTS_ID_INITIAL_INDEX;
0065
0066 while ((the_key = T_get_next_posix_key(&id)) != NULL ) {
0067 count += (ssize_t)
0068 _Chain_Node_count_unprotected(&the_key->Key_value_pairs);
0069 _Objects_Allocator_unlock();
0070 }
0071
0072 return count;
0073 }
0074
0075 static void
0076 T_posix_keys_run_initialize(void)
0077 {
0078 T_posix_key_count = T_objects_count(OBJECTS_POSIX_API,
0079 OBJECTS_POSIX_KEYS);
0080 T_posix_key_value_count = T_get_active_posix_key_value_pairs();
0081 }
0082
0083 static void
0084 T_posix_keys_case_end(void)
0085 {
0086 ssize_t count;
0087 ssize_t delta;
0088
0089 T_objects_check(OBJECTS_POSIX_API, OBJECTS_POSIX_KEYS,
0090 &T_posix_key_count, "POSIX key");
0091
0092 count = T_get_active_posix_key_value_pairs();
0093 delta = count - T_posix_key_value_count;
0094
0095 if (delta != 0) {
0096 T_posix_key_value_count = count;
0097 T_check(&T_special, false, "POSIX key value pair leak (%zi)",
0098 delta);
0099 }
0100 }
0101
0102 void
0103 T_check_posix_keys(T_event event, const char *name)
0104 {
0105 (void)name;
0106
0107 switch (event) {
0108 case T_EVENT_RUN_INITIALIZE_EARLY:
0109 T_posix_keys_run_initialize();
0110 break;
0111 case T_EVENT_CASE_END:
0112 T_posix_keys_case_end();
0113 break;
0114 default:
0115 break;
0116 };
0117 }