From b5c906429f6e67452eec1b0089ac7a204ff998ee Mon Sep 17 00:00:00 2001 From: Zhongwei Yao Date: Mon, 5 Aug 2013 09:20:45 -0400 Subject: Unlimited objects support for POSIX keys This patch enables unlimited model in POSIX key manger and have a decent runtime on POSIX key searching, adding and deleting operations. Memory overhead is lower than current implementation when the size of key and key value becomes big. --- testsuites/psxtests/psxkey09/Makefile.am | 23 +++++++ testsuites/psxtests/psxkey09/init.c | 103 ++++++++++++++++++++++++++++++ testsuites/psxtests/psxkey09/psxkey09.doc | 22 +++++++ testsuites/psxtests/psxkey09/psxkey09.scn | 9 +++ 4 files changed, 157 insertions(+) create mode 100644 testsuites/psxtests/psxkey09/Makefile.am create mode 100644 testsuites/psxtests/psxkey09/init.c create mode 100644 testsuites/psxtests/psxkey09/psxkey09.doc create mode 100644 testsuites/psxtests/psxkey09/psxkey09.scn (limited to 'testsuites/psxtests/psxkey09') diff --git a/testsuites/psxtests/psxkey09/Makefile.am b/testsuites/psxtests/psxkey09/Makefile.am new file mode 100644 index 0000000000..ed3ee0045d --- /dev/null +++ b/testsuites/psxtests/psxkey09/Makefile.am @@ -0,0 +1,23 @@ + +rtems_tests_PROGRAMS = psxkey09 +psxkey09_SOURCES = init.c + +dist_rtems_tests_DATA = psxkey09.scn +dist_rtems_tests_DATA += psxkey09.doc + +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg +include $(top_srcdir)/../automake/compile.am +include $(top_srcdir)/../automake/leaf.am + + +AM_CPPFLAGS += -I$(top_srcdir)/include +AM_CPPFLAGS += -I$(top_srcdir)/../support/include + +LINK_OBJS = $(psxkey09_OBJECTS) +LINK_LIBS = $(psxkey09_LDLIBS) + +psxkey09$(EXEEXT): $(psxkey09_OBJECTS) $(psxkey09_DEPENDENCIES) + @rm -f psxkey09$(EXEEXT) + $(make-exe) + +include $(top_srcdir)/../automake/local.am diff --git a/testsuites/psxtests/psxkey09/init.c b/testsuites/psxtests/psxkey09/init.c new file mode 100644 index 0000000000..a44f0e36ca --- /dev/null +++ b/testsuites/psxtests/psxkey09/init.c @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2012 Zhongwei Yao. + * COPYRIGHT (c) 1989-2012. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include "tmacros.h" +#include "pmacros.h" + + +/* forward declarations to avoid warnings */ +void *POSIX_Init(void *argument); +void destructor(void *value); +void *Test_Thread(void *argument); + +int Data_array[1] = {1}; + +pthread_key_t key; +volatile bool destructor_ran; + +void destructor(void *value) +{ + destructor_ran = true; +} + +void *Test_Thread( + void *argument +) +{ + int sc; + + /** + * Detach ourselves to release test thread's resource after thread exit. + */ + pthread_detach( pthread_self() ); + + puts( "Test_Thread - key pthread_setspecific - OK" ); + sc = pthread_setspecific( key, argument ); + rtems_test_assert( !sc ); + + puts( "Test_Thread - pthread_exit to run key destructors - OK" ); + return NULL; +} + +void *POSIX_Init( + void *ignored +) +{ + pthread_t thread; + int sc; + struct timespec delay_request; + + puts( "\n\n*** TEST KEY 09 ***" ); + + puts( "Init - pthread key create with destructor - OK" ); + sc = pthread_key_create( &key, destructor ); + rtems_test_assert( !sc ); + + puts( "Init - pthread create - OK" ); + sc = pthread_create( &thread, NULL, Test_Thread, &sc ); + rtems_test_assert( !sc ); + + puts( "Init - sleep - let thread run - OK" ); + delay_request.tv_sec = 0; + delay_request.tv_nsec = 8 * 100000000; + sc = nanosleep( &delay_request, NULL ); + rtems_test_assert( !sc ); + + puts( "Init - verify destructor run - OK" ); + rtems_test_assert( destructor_ran == true ); + + puts( "Init - pthread key delete - OK" ); + sc = pthread_key_delete( key ); + rtems_test_assert( sc == 0 ); + + puts( "*** END OF TEST KEY 09 ***" ); + rtems_test_exit(0); +} + +/* configuration information */ + +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER + +#define CONFIGURE_MAXIMUM_POSIX_THREADS 2 +#define CONFIGURE_MAXIMUM_POSIX_KEYS 1 + +#define CONFIGURE_POSIX_INIT_THREAD_TABLE + +#define CONFIGURE_INIT +#include + +/* global variables */ diff --git a/testsuites/psxtests/psxkey09/psxkey09.doc b/testsuites/psxtests/psxkey09/psxkey09.doc new file mode 100644 index 0000000000..ecb9b742be --- /dev/null +++ b/testsuites/psxtests/psxkey09/psxkey09.doc @@ -0,0 +1,22 @@ +# COPYRIGHT (c) 1989-2009. +# On-Line Applications Research Corporation (OAR). +# +# The license and distribution terms for this file may be +# found in the file LICENSE in this distribution or at +# http://www.rtems.com/license/LICENSE. +# + +This file describes the directives and concepts tested by this test set. + +test set name: psxkey09 + +directives: + + pthread_key_create + pthread_setspecific + pthread_key_delete + _POSIX_Keys_Run_destructors + +concepts: + ++ Ensure that POSIX Key works when thread deleted first and then deleted key self. diff --git a/testsuites/psxtests/psxkey09/psxkey09.scn b/testsuites/psxtests/psxkey09/psxkey09.scn new file mode 100644 index 0000000000..707c7d63b1 --- /dev/null +++ b/testsuites/psxtests/psxkey09/psxkey09.scn @@ -0,0 +1,9 @@ +*** TEST KEY 09 *** +Init - pthread key create with destructor - OK +Init - pthread create - OK +Init - sleep - let thread run - OK +Test_Thread - key pthread_setspecific - OK +Test_Thread - pthread_exit to run key destructors - OK +Init - verify destructor run - OK +Init - pthread key delete - OK +*** END OF TEST KEY 09 *** -- cgit v1.2.3