source: rtems/testsuites/psxtests/psxconfig01/init.c @ d98217c

4.115
Last change on this file since d98217c was d98217c, checked in by Sebastian Huber <sebastian.huber@…>, on 03/28/14 at 10:52:28

psxtests/psxconfig01: Fix for POSIX keys config

  • Property mode set to 100644
File size: 15.1 KB
Line 
1/**
2 * @file
3 *
4 * @ingroup psxtests
5 *
6 * @brief Test that the workspace size estimate is correct.
7 */
8
9/*
10 * Copyright (c) 2011-2012 embedded brains GmbH.  All rights reserved.
11 *
12 *  embedded brains GmbH
13 *  Obere Lagerstr. 30
14 *  82178 Puchheim
15 *  Germany
16 *  <rtems@embedded-brains.de>
17 *
18 * The license and distribution terms for this file may be
19 * found in the file LICENSE in this distribution or at
20 * http://www.rtems.org/license/LICENSE.
21 */
22
23#ifdef HAVE_CONFIG_H
24  #include "config.h"
25#endif
26
27#include <rtems/test.h>
28#include <tmacros.h>
29
30#include <sys/stat.h>
31#include <fcntl.h>
32#include <inttypes.h>
33#include <mqueue.h>
34#include <pthread.h>
35#include <semaphore.h>
36#include <signal.h>
37#include <stdio.h>
38#include <time.h>
39#include <limits.h>
40
41#include <rtems/libcsupport.h>
42
43const char rtems_test_name[] = "PSXCONFIG 1";
44
45#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 5
46
47#define CONFIGURE_MAXIMUM_BARRIERS 2
48#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 7
49#define CONFIGURE_MAXIMUM_PARTITIONS 37
50#define CONFIGURE_MAXIMUM_PERIODS 41
51#define CONFIGURE_MAXIMUM_REGIONS 43
52#define CONFIGURE_MAXIMUM_SEMAPHORES 47
53#define CONFIGURE_MAXIMUM_TASKS 11
54#define CONFIGURE_MAXIMUM_TASK_VARIABLES 13
55#define CONFIGURE_MAXIMUM_TIMERS 59
56#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 17
57
58#define CONFIGURE_MAXIMUM_POSIX_BARRIERS 31
59#define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES 29
60#define CONFIGURE_MAXIMUM_POSIX_KEYS 23
61#define POSIX_MQ_COUNT 5
62#define CONFIGURE_MAXIMUM_POSIX_MUTEXES 19
63#define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS 7
64#define CONFIGURE_MAXIMUM_POSIX_RWLOCKS 31
65#define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES 41
66#define CONFIGURE_MAXIMUM_POSIX_SPINLOCKS 17
67#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
68
69#define CONFIGURE_MAXIMUM_POSIX_THREADS 3
70#define CONFIGURE_MAXIMUM_POSIX_TIMERS 47
71
72#ifndef CONFIGURE_MAXIMUM_TASKS
73  #define CONFIGURE_MAXIMUM_TASKS 1
74#endif
75
76#ifdef CONFIGURE_MAXIMUM_MESSAGE_QUEUES
77  #define MQ_0_COUNT 2
78  #define MQ_1_COUNT 3
79  #define MQ_2_COUNT 5
80  #define MQ_3_COUNT 7
81  #define MQ_4_COUNT 11
82  #define MQ_5_COUNT 13
83  #define MQ_6_COUNT 17
84
85  #define MQ_0_SIZE 101
86  #define MQ_1_SIZE 103
87  #define MQ_2_SIZE 107
88  #define MQ_3_SIZE 109
89  #define MQ_4_SIZE 113
90  #define MQ_5_SIZE 127
91  #define MQ_6_SIZE 131
92
93  #define MQ_BUFFER_MEMORY \
94    (CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(MQ_0_COUNT, MQ_0_SIZE) \
95      + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(MQ_1_COUNT, MQ_1_SIZE) \
96      + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(MQ_2_COUNT, MQ_2_SIZE) \
97      + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(MQ_3_COUNT, MQ_3_SIZE) \
98      + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(MQ_4_COUNT, MQ_4_SIZE) \
99      + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(MQ_5_COUNT, MQ_5_SIZE) \
100      + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(MQ_6_COUNT, MQ_6_SIZE))
101
102  static const uint8_t mq_counts [CONFIGURE_MAXIMUM_MESSAGE_QUEUES] = {
103    MQ_0_COUNT,
104    MQ_1_COUNT,
105    MQ_2_COUNT,
106    MQ_3_COUNT,
107    MQ_4_COUNT,
108    MQ_5_COUNT,
109    MQ_6_COUNT
110  };
111
112  static const uint8_t mq_sizes [CONFIGURE_MAXIMUM_MESSAGE_QUEUES] = {
113    MQ_0_SIZE,
114    MQ_1_SIZE,
115    MQ_2_SIZE,
116    MQ_3_SIZE,
117    MQ_4_SIZE,
118    MQ_5_SIZE,
119    MQ_6_SIZE
120  };
121#else
122  #define MQ_BUFFER_MEMORY 0
123#endif
124
125#ifdef POSIX_MQ_COUNT
126  #define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS POSIX_MQ_COUNT
127  #define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES POSIX_MQ_COUNT
128
129  #define POSIX_MQ_0_COUNT 2
130  #define POSIX_MQ_1_COUNT 3
131  #define POSIX_MQ_2_COUNT 5
132  #define POSIX_MQ_3_COUNT 7
133  #define POSIX_MQ_4_COUNT 11
134
135  #define POSIX_MQ_0_SIZE 137
136  #define POSIX_MQ_1_SIZE 139
137  #define POSIX_MQ_2_SIZE 149
138  #define POSIX_MQ_3_SIZE 151
139  #define POSIX_MQ_4_SIZE 157
140
141  #define POSIX_MQ_BUFFER_MEMORY \
142    (CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(POSIX_MQ_0_COUNT, POSIX_MQ_0_SIZE) \
143      + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(POSIX_MQ_1_COUNT, POSIX_MQ_1_SIZE) \
144      + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(POSIX_MQ_2_COUNT, POSIX_MQ_2_SIZE) \
145      + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(POSIX_MQ_3_COUNT, POSIX_MQ_3_SIZE) \
146      + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(POSIX_MQ_4_COUNT, POSIX_MQ_4_SIZE))
147
148  static const uint8_t posix_mq_counts [POSIX_MQ_COUNT] = {
149    POSIX_MQ_0_COUNT,
150    POSIX_MQ_1_COUNT,
151    POSIX_MQ_2_COUNT,
152    POSIX_MQ_3_COUNT,
153    POSIX_MQ_4_COUNT
154  };
155
156  static const uint8_t posix_mq_sizes [POSIX_MQ_COUNT] = {
157    POSIX_MQ_0_SIZE,
158    POSIX_MQ_1_SIZE,
159    POSIX_MQ_2_SIZE,
160    POSIX_MQ_3_SIZE,
161    POSIX_MQ_4_SIZE
162  };
163#else
164  #define POSIX_MQ_BUFFER_MEMORY 0
165#endif
166
167#define CONFIGURE_MESSAGE_BUFFER_MEMORY \
168  (MQ_BUFFER_MEMORY + POSIX_MQ_BUFFER_MEMORY)
169
170#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
171#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
172
173#define CONFIGURE_MAXIMUM_DRIVERS 2
174
175#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
176
177#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
178
179#define CONFIGURE_INIT
180
181static rtems_task Init(rtems_task_argument argument);
182
183#include <rtems/confdefs.h>
184
185typedef struct {
186  uint64_t data [16];
187} area;
188
189#ifdef CONFIGURE_MAXIMUM_PARTITIONS
190  static area partition_areas [CONFIGURE_MAXIMUM_PARTITIONS];
191#endif
192
193#ifdef CONFIGURE_MAXIMUM_REGIONS
194  static area region_areas [CONFIGURE_MAXIMUM_REGIONS];
195#endif
196
197static char posix_name [NAME_MAX];
198
199static void *task_var;
200
201static char *get_posix_name(char a, char b, char c, int i)
202{
203  posix_name [NAME_MAX - 5] = a;
204  posix_name [NAME_MAX - 4] = b;
205  posix_name [NAME_MAX - 3] = c;
206  posix_name [NAME_MAX - 2] = 'A' + i;
207
208  return posix_name;
209}
210
211static void task_var_dtor(void *var __attribute__((unused)))
212{
213  /* Do nothing */
214}
215
216static void *posix_thread(void *arg __attribute__((unused)))
217{
218  rtems_test_assert(0);
219}
220
221static void posix_key_dtor(void *key __attribute__((unused)))
222{
223  /* Do nothing */
224}
225
226static void print_info(void)
227{
228  Heap_Information_block info;
229  bool ok = rtems_workspace_get_information(&info);
230  rtems_test_assert(ok);
231
232  printf(
233    "used blocks = %" PRIu32 ", "
234    "largest used block = %" PRIu32 ", "
235    "used space = %" PRIu32 "\n"
236    "free blocks = %" PRIu32 ", "
237    "largest free block = %" PRIu32 ", "
238    "free space = %" PRIu32 "\n",
239    info.Used.number,
240    info.Used.largest,
241    info.Used.total,
242    info.Free.number,
243    info.Free.largest,
244    info.Free.total
245  );
246}
247
248static rtems_task Init(rtems_task_argument argument)
249{
250  rtems_status_code sc = RTEMS_SUCCESSFUL;
251  int eno = 0;
252  int rv = 0;
253  rtems_id id = RTEMS_ID_NONE;
254  rtems_name name = rtems_build_name('C', 'O', 'N', 'F');
255  rtems_extensions_table table;
256  rtems_resource_snapshot snapshot;
257  int i = 0;
258
259  TEST_BEGIN();
260
261  memset(posix_name, 'P', sizeof(posix_name) - 1);
262
263  print_info();
264
265  rtems_resource_snapshot_take(&snapshot);
266  rtems_test_assert(rtems_resource_snapshot_equal(&snapshot, &snapshot));
267  rtems_test_assert(rtems_resource_snapshot_check(&snapshot));
268
269#ifdef CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
270  for (i = 3; i < CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS; ++i) {
271    int oflag = O_WRONLY | O_CREAT | O_TRUNC;
272    mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
273    char path [] = { 'F', 'I', 'L', 'E', 'A' + i, '\0' };
274    int fd = open(path, oflag, mode);
275    rtems_test_assert(fd == i);
276  }
277  rtems_resource_snapshot_take(&snapshot);
278  rtems_test_assert(
279    snapshot.open_files == CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
280  );
281#endif
282
283#ifdef CONFIGURE_MAXIMUM_USER_EXTENSIONS
284  memset(&table, 0, sizeof(table));
285  for (i = 0; i < CONFIGURE_MAXIMUM_USER_EXTENSIONS; ++i) {
286    sc = rtems_extension_create(name, &table, &id);
287    directive_failed(sc, "rtems_extension_create");
288  }
289  rtems_resource_snapshot_take(&snapshot);
290  rtems_test_assert(
291    snapshot.rtems_api.active_extensions == CONFIGURE_MAXIMUM_USER_EXTENSIONS
292  );
293#endif
294
295#ifdef CONFIGURE_MAXIMUM_BARRIERS
296  for (i = 0; i < CONFIGURE_MAXIMUM_BARRIERS; ++i) {
297    sc = rtems_barrier_create(name, RTEMS_DEFAULT_ATTRIBUTES, 1, &id);
298    directive_failed(sc, "rtems_barrier_create");
299  }
300  rtems_resource_snapshot_take(&snapshot);
301  rtems_test_assert(
302    snapshot.rtems_api.active_barriers == CONFIGURE_MAXIMUM_BARRIERS
303  );
304#endif
305
306#ifdef CONFIGURE_MAXIMUM_MESSAGE_QUEUES
307  for (i = 0; i < CONFIGURE_MAXIMUM_MESSAGE_QUEUES; ++i) {
308    sc = rtems_message_queue_create(
309      name,
310      mq_counts [i],
311      mq_sizes [i],
312      RTEMS_DEFAULT_ATTRIBUTES,
313      &id
314    );
315    directive_failed(sc, "rtems_message_queue_create");
316  }
317  rtems_resource_snapshot_take(&snapshot);
318  rtems_test_assert(
319    snapshot.rtems_api.active_message_queues
320      == CONFIGURE_MAXIMUM_MESSAGE_QUEUES
321  );
322#endif
323
324#ifdef CONFIGURE_MAXIMUM_PARTITIONS
325  for (i = 0; i < CONFIGURE_MAXIMUM_PARTITIONS; ++i) {
326    sc = rtems_partition_create(
327      name,
328      partition_areas + i,
329      sizeof(partition_areas [0]),
330      sizeof(partition_areas [0]),
331      RTEMS_DEFAULT_ATTRIBUTES,
332      &id
333    );
334    directive_failed(sc, "rtems_partition_create");
335  }
336  rtems_resource_snapshot_take(&snapshot);
337  rtems_test_assert(
338    snapshot.rtems_api.active_partitions == CONFIGURE_MAXIMUM_PARTITIONS
339  );
340#endif
341
342#ifdef CONFIGURE_MAXIMUM_PERIODS
343  for (i = 0; i < CONFIGURE_MAXIMUM_PERIODS; ++i) {
344    sc = rtems_rate_monotonic_create(name, &id);
345    directive_failed(sc, "rtems_rate_monotonic_create");
346  }
347  rtems_resource_snapshot_take(&snapshot);
348  rtems_test_assert(
349    snapshot.rtems_api.active_periods == CONFIGURE_MAXIMUM_PERIODS
350  );
351#endif
352
353#ifdef CONFIGURE_MAXIMUM_REGIONS
354  for (i = 0; i < CONFIGURE_MAXIMUM_REGIONS; ++i) {
355    sc = rtems_region_create(
356      name,
357      region_areas + i,
358      sizeof(region_areas [0]),
359      1,
360      RTEMS_DEFAULT_ATTRIBUTES,
361      &id
362    );
363    directive_failed(sc, "rtems_region_create");
364  }
365  rtems_resource_snapshot_take(&snapshot);
366  rtems_test_assert(
367    snapshot.rtems_api.active_regions == CONFIGURE_MAXIMUM_REGIONS
368  );
369#endif
370
371#ifdef CONFIGURE_MAXIMUM_SEMAPHORES
372  for (i = 0; i < CONFIGURE_MAXIMUM_SEMAPHORES; ++i) {
373    sc = rtems_semaphore_create(
374      name,
375      0,
376      RTEMS_DEFAULT_ATTRIBUTES,
377      0,
378      &id
379    );
380    directive_failed(sc, "rtems_semaphore_create");
381  }
382  rtems_resource_snapshot_take(&snapshot);
383  rtems_test_assert(
384    snapshot.rtems_api.active_semaphores >= CONFIGURE_MAXIMUM_SEMAPHORES
385  );
386#endif
387
388#ifdef CONFIGURE_MAXIMUM_TASKS
389  for (i = 1; i < CONFIGURE_MAXIMUM_TASKS; ++i) {
390    sc = rtems_task_create(
391      name,
392      RTEMS_MINIMUM_PRIORITY,
393      RTEMS_MINIMUM_STACK_SIZE,
394      RTEMS_DEFAULT_MODES,
395      RTEMS_LOCAL | RTEMS_FLOATING_POINT,
396      &id
397    );
398    directive_failed(sc, "rtems_task_create");
399  }
400  rtems_resource_snapshot_take(&snapshot);
401  rtems_test_assert(
402    snapshot.rtems_api.active_tasks == CONFIGURE_MAXIMUM_TASKS
403  );
404#endif
405
406#ifdef CONFIGURE_MAXIMUM_TASK_VARIABLES
407  for (i = 0; i < CONFIGURE_MAXIMUM_TASK_VARIABLES; ++i) {
408    sc = rtems_task_variable_add(RTEMS_SELF, &task_var, task_var_dtor);
409    directive_failed(sc, "rtems_task_variable_add");
410  }
411#endif
412
413#ifdef CONFIGURE_MAXIMUM_TIMERS
414  for (i = 0; i < CONFIGURE_MAXIMUM_TIMERS; ++i) {
415    sc = rtems_timer_create(name, &id);
416    directive_failed(sc, "rtems_timer_create");
417  }
418  rtems_resource_snapshot_take(&snapshot);
419  rtems_test_assert(
420    snapshot.rtems_api.active_timers == CONFIGURE_MAXIMUM_TIMERS
421  );
422#endif
423
424#ifdef CONFIGURE_MAXIMUM_POSIX_BARRIERS
425  for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_BARRIERS; ++i) {
426    pthread_barrier_t barrier;
427    eno = pthread_barrier_init(&barrier, NULL, 1);
428    rtems_test_assert(eno == 0);
429  }
430  rtems_resource_snapshot_take(&snapshot);
431  rtems_test_assert(
432    snapshot.posix_api.active_barriers == CONFIGURE_MAXIMUM_POSIX_BARRIERS
433  );
434#endif
435
436#ifdef CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
437  for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES; ++i) {
438    pthread_cond_t cond;
439    eno = pthread_cond_init(&cond, NULL);
440    rtems_test_assert(eno == 0);
441  }
442  rtems_resource_snapshot_take(&snapshot);
443  rtems_test_assert(
444    snapshot.posix_api.active_condition_variables
445      == CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
446  );
447#endif
448
449#ifdef CONFIGURE_MAXIMUM_POSIX_KEYS
450  for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_KEYS; ++i) {
451    pthread_key_t key;
452    eno = pthread_key_create(&key, posix_key_dtor);
453    rtems_test_assert(eno == 0);
454  }
455  rtems_resource_snapshot_take(&snapshot);
456  rtems_test_assert(
457    snapshot.posix_api.active_keys == CONFIGURE_POSIX_KEYS
458  );
459#endif
460
461#ifdef POSIX_MQ_COUNT
462  for (i = 0; i < POSIX_MQ_COUNT; ++i) {
463    int oflag = O_RDWR | O_CREAT | O_EXCL;
464    mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
465    struct mq_attr attr = {
466      .mq_maxmsg = posix_mq_counts [i],
467      .mq_msgsize = posix_mq_sizes [i]
468    };
469    char *path = get_posix_name('M', 'S', 'Q', i);
470    mqd_t mq = mq_open(path, oflag, mode, &attr);
471    rtems_test_assert(mq >= 0);
472  }
473  rtems_resource_snapshot_take(&snapshot);
474  rtems_test_assert(
475    snapshot.posix_api.active_message_queue_descriptors
476      == CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS
477  );
478  rtems_test_assert(
479    snapshot.posix_api.active_message_queues
480      == CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
481  );
482#endif
483
484#ifdef CONFIGURE_MAXIMUM_POSIX_MUTEXES
485  for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_MUTEXES; ++i) {
486    pthread_mutex_t mutex;
487    eno = pthread_mutex_init(&mutex, NULL);
488    rtems_test_assert(eno == 0);
489  }
490  rtems_resource_snapshot_take(&snapshot);
491  rtems_test_assert(
492    snapshot.posix_api.active_mutexes == CONFIGURE_MAXIMUM_POSIX_MUTEXES
493  );
494#endif
495
496#ifdef CONFIGURE_MAXIMUM_POSIX_RWLOCKS
497  for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_RWLOCKS; ++i) {
498    pthread_rwlock_t rwlock;
499    eno = pthread_rwlock_init(&rwlock, NULL);
500    rtems_test_assert(eno == 0);
501  }
502  rtems_resource_snapshot_take(&snapshot);
503  rtems_test_assert(
504    snapshot.posix_api.active_rwlocks == CONFIGURE_MAXIMUM_POSIX_RWLOCKS
505  );
506#endif
507
508#ifdef CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
509  for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_SEMAPHORES; ++i) {
510    int oflag = O_RDWR | O_CREAT | O_EXCL;
511    mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
512    unsigned int value = 0;
513    char *path = get_posix_name('S', 'E', 'M', i);
514    sem_t *sem = sem_open(path, oflag, mode, value);
515    rtems_test_assert(sem != SEM_FAILED);
516  }
517  rtems_resource_snapshot_take(&snapshot);
518  rtems_test_assert(
519    snapshot.posix_api.active_semaphores == CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
520  );
521#endif
522
523#ifdef CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
524  for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_SPINLOCKS; ++i) {
525    pthread_spinlock_t spinlock;
526    eno = pthread_spin_init(&spinlock, 0);
527    rtems_test_assert(eno == 0);
528  }
529  rtems_resource_snapshot_take(&snapshot);
530  rtems_test_assert(
531    snapshot.posix_api.active_spinlocks == CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
532  );
533#endif
534
535#ifdef CONFIGURE_MAXIMUM_POSIX_THREADS
536  for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_THREADS; ++i) {
537    pthread_t thread;
538    eno = pthread_create(&thread, NULL, posix_thread, NULL);
539    rtems_test_assert(eno == 0);
540  }
541  rtems_resource_snapshot_take(&snapshot);
542  rtems_test_assert(
543    snapshot.posix_api.active_threads == CONFIGURE_MAXIMUM_POSIX_THREADS
544  );
545#endif
546
547#ifdef CONFIGURE_MAXIMUM_POSIX_TIMERS
548  for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_TIMERS; ++i) {
549    timer_t timer_id;
550    rv = timer_create(CLOCK_REALTIME, NULL, &timer_id);
551    rtems_test_assert(rv == 0);
552  }
553  rtems_resource_snapshot_take(&snapshot);
554  rtems_test_assert(
555    snapshot.posix_api.active_timers == CONFIGURE_MAXIMUM_POSIX_TIMERS
556  );
557#endif
558
559  printf("object creation done\n");
560  print_info();
561
562  TEST_END();
563
564  rtems_test_exit(0);
565}
Note: See TracBrowser for help on using the repository browser.