# HG changeset patch # User Bruno Haible # Date 1518858301 -3600 # Node ID f6cb783d3822a496077da8252e8a1baf193007a3 # Parent aa3cd60dc529a832319fdaa421b2f6ff1322badd lock: Add test of gl_once. * tests/test-once.c: New file. * modules/lock-tests (Files): Add it. (Makefile.am): Build and test programs 'test-once1' and 'test-once2'. diff -r aa3cd60dc529 -r f6cb783d3822 ChangeLog --- a/ChangeLog Sat Feb 17 09:55:43 2018 +0100 +++ b/ChangeLog Sat Feb 17 10:05:01 2018 +0100 @@ -1,3 +1,10 @@ +2018-02-17 Bruno Haible + + lock: Add test of gl_once. + * tests/test-once.c: New file. + * modules/lock-tests (Files): Add it. + (Makefile.am): Build and test programs 'test-once1' and 'test-once2'. + 2018-02-17 Bruno Haible thread: Fix compilation error on IRIX. diff -r aa3cd60dc529 -r f6cb783d3822 modules/lock-tests --- a/modules/lock-tests Sat Feb 17 09:55:43 2018 +0100 +++ b/modules/lock-tests Sat Feb 17 10:05:01 2018 +0100 @@ -1,6 +1,7 @@ Files: tests/test-rwlock1.c tests/test-lock.c +tests/test-once.c Depends-on: thread @@ -11,7 +12,11 @@ AC_CHECK_HEADERS_ONCE([semaphore.h]) Makefile.am: -TESTS += test-rwlock1 test-lock -check_PROGRAMS += test-rwlock1 test-lock +TESTS += test-rwlock1 test-lock test-once1 test-once2 +check_PROGRAMS += test-rwlock1 test-lock test-once1 test-once2 test_rwlock1_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@ test_lock_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@ +test_once1_SOURCES = test-once.c +test_once1_LDADD = $(LDADD) @LIBTHREAD@ +test_once2_SOURCES = test-once.c +test_once2_LDADD = $(LDADD) @LIBMULTITHREAD@ diff -r aa3cd60dc529 -r f6cb783d3822 tests/test-once.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-once.c Sat Feb 17 10:05:01 2018 +0100 @@ -0,0 +1,43 @@ +/* Test of once-only execution in multithreaded situations. + Copyright (C) 2018 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2018. */ + +#include + +#include "glthread/lock.h" + +#include "macros.h" + +gl_once_define(static, a_once) + +static int a; + +static void +a_init (void) +{ + a = 42; +} + +int +main () +{ + gl_once (a_once, a_init); + + ASSERT (a == 42); + + return 0; +}