Merge from backend: wikis, admin-scrits, test.sh

(dont merge any srcfiles)
This commit is contained in:
Fischlurch 2008-04-12 02:07:16 +02:00
parent 15bab21da8
commit a03e3c5e73
23 changed files with 23958 additions and 194 deletions

View file

@ -29,8 +29,12 @@ SUBDIRS =
# Only use subdirs if really needed, prefer the include scheme below # Only use subdirs if really needed, prefer the include scheme below
#SUBDIRS += #SUBDIRS +=
# administrative tools
include $(top_srcdir)/admin/Makefile.am
# core # core
include $(top_srcdir)/src/lib/Makefile.am include $(top_srcdir)/src/lib/Makefile.am
include $(top_srcdir)/src/backend/Makefile.am
# plugins # plugins
#include $(top_srcdir)/src... #include $(top_srcdir)/src...

View file

@ -179,7 +179,7 @@ def configurePlatform(env):
if not conf.CheckLibWithHeader('pthread', 'pthread.h', 'C'): if not conf.CheckLibWithHeader('pthread', 'pthread.h', 'C'):
print 'Did not find the pthread lib or pthread.h, exiting.' print 'Did not find the pthread lib or pthread.h, exiting.'
else: else:
conf.env.Append(CPPFLAGS = ' -DHAVE_PTHREAD_H') conf.env.Append(CPPFLAGS = ' -DHAVE_PTHREAD')
conf.env.Append(CCFLAGS = ' -pthread') conf.env.Append(CCFLAGS = ' -pthread')
if conf.CheckCHeader('execinfo.h'): if conf.CheckCHeader('execinfo.h'):

238
acinclude.m4 Normal file
View file

@ -0,0 +1,238 @@
dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
dnl
dnl @summary figure out how to build C programs using POSIX threads
dnl
dnl This macro figures out how to build C programs using POSIX threads.
dnl It sets the PTHREAD_LIBS output variable to the threads library and
dnl linker flags, and the PTHREAD_CFLAGS output variable to any special
dnl C compiler flags that are needed. (The user can also force certain
dnl compiler flags/libs to be tested by setting these environment
dnl variables.)
dnl
dnl Also sets PTHREAD_CC to any special C compiler that is needed for
dnl multi-threaded programs (defaults to the value of CC otherwise).
dnl (This is necessary on AIX to use the special cc_r compiler alias.)
dnl
dnl NOTE: You are assumed to not only compile your program with these
dnl flags, but also link it with them as well. e.g. you should link
dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS
dnl $LIBS
dnl
dnl If you are only building threads programs, you may wish to use
dnl these variables in your default LIBS, CFLAGS, and CC:
dnl
dnl LIBS="$PTHREAD_LIBS $LIBS"
dnl CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
dnl CC="$PTHREAD_CC"
dnl
dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute
dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to
dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
dnl
dnl ACTION-IF-FOUND is a list of shell commands to run if a threads
dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to
dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the
dnl default action will define HAVE_PTHREAD.
dnl
dnl Please let the authors know if this macro fails on any platform, or
dnl if you have any other suggestions or comments. This macro was based
dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with
dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros
dnl posted by Alejandro Forero Cuervo to the autoconf macro repository.
dnl We are also grateful for the helpful feedback of numerous users.
dnl
dnl @category InstalledPackages
dnl @author Steven G. Johnson <stevenj@alum.mit.edu>
dnl @version 2005-06-15
dnl @license GPLWithACException
AC_DEFUN([ACX_PTHREAD], [
AC_REQUIRE([AC_CANONICAL_HOST])
AC_LANG_SAVE
AC_LANG_C
acx_pthread_ok=no
# We used to check for pthread.h first, but this fails if pthread.h
# requires special compiler flags (e.g. on True64 or Sequent).
# It gets checked for in the link test anyway.
# First of all, check if the user has set any of the PTHREAD_LIBS,
# etcetera environment variables, and if threads linking works using
# them:
if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
save_LIBS="$LIBS"
LIBS="$PTHREAD_LIBS $LIBS"
AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
AC_MSG_RESULT($acx_pthread_ok)
if test x"$acx_pthread_ok" = xno; then
PTHREAD_LIBS=""
PTHREAD_CFLAGS=""
fi
LIBS="$save_LIBS"
CFLAGS="$save_CFLAGS"
fi
# We must check for the threads library under a number of different
# names; the ordering is very important because some systems
# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
# libraries is broken (non-POSIX).
# Create a list of thread flags to try. Items starting with a "-" are
# C compiler flags, and other items are library names, except for "none"
# which indicates that we try without any flags at all, and "pthread-config"
# which is a program returning the flags for the Pth emulation library.
acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
# The ordering *is* (sometimes) important. Some notes on the
# individual items follow:
# pthreads: AIX (must check this before -lpthread)
# none: in case threads are in libc; should be tried before -Kthread and
# other compiler flags to prevent continual compiler warnings
# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
# -pthreads: Solaris/gcc
# -mthreads: Mingw32/gcc, Lynx/gcc
# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
# doesn't hurt to check since this sometimes defines pthreads too;
# also defines -D_REENTRANT)
# ... -mt is also the pthreads flag for HP/aCC
# pthread: Linux, etcetera
# --thread-safe: KAI C++
# pthread-config: use pthread-config program (for GNU Pth library)
case "${host_cpu}-${host_os}" in
*solaris*)
# On Solaris (at least, for some versions), libc contains stubbed
# (non-functional) versions of the pthreads routines, so link-based
# tests will erroneously succeed. (We need to link with -pthreads/-mt/
# -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
# a function called by this macro, so we could check for that, but
# who knows whether they'll stub that too in a future libc.) So,
# we'll just look for -pthreads and -lpthread first:
acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags"
;;
esac
if test x"$acx_pthread_ok" = xno; then
for flag in $acx_pthread_flags; do
case $flag in
none)
AC_MSG_CHECKING([whether pthreads work without any flags])
;;
-*)
AC_MSG_CHECKING([whether pthreads work with $flag])
PTHREAD_CFLAGS="$flag"
;;
pthread-config)
AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
if test x"$acx_pthread_config" = xno; then continue; fi
PTHREAD_CFLAGS="`pthread-config --cflags`"
PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
;;
*)
AC_MSG_CHECKING([for the pthreads library -l$flag])
PTHREAD_LIBS="-l$flag"
;;
esac
save_LIBS="$LIBS"
save_CFLAGS="$CFLAGS"
LIBS="$PTHREAD_LIBS $LIBS"
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
# Check for various functions. We must include pthread.h,
# since some functions may be macros. (On the Sequent, we
# need a special flag -Kthread to make this header compile.)
# We check for pthread_join because it is in -lpthread on IRIX
# while pthread_create is in libc. We check for pthread_attr_init
# due to DEC craziness with -lpthreads. We check for
# pthread_cleanup_push because it is one of the few pthread
# functions on Solaris that doesn't have a non-functional libc stub.
# We try pthread_create on general principles.
AC_TRY_LINK([#include <pthread.h>],
[pthread_t th; pthread_join(th, 0);
pthread_attr_init(0); pthread_cleanup_push(0, 0);
pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
[acx_pthread_ok=yes])
LIBS="$save_LIBS"
CFLAGS="$save_CFLAGS"
AC_MSG_RESULT($acx_pthread_ok)
if test "x$acx_pthread_ok" = xyes; then
break;
fi
PTHREAD_LIBS=""
PTHREAD_CFLAGS=""
done
fi
# Various other checks:
if test "x$acx_pthread_ok" = xyes; then
save_LIBS="$LIBS"
LIBS="$PTHREAD_LIBS $LIBS"
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
# Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
AC_MSG_CHECKING([for joinable pthread attribute])
attr_name=unknown
for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;],
[attr_name=$attr; break])
done
AC_MSG_RESULT($attr_name)
if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
[Define to necessary symbol if this constant
uses a non-standard name on your system.])
fi
AC_MSG_CHECKING([if more special flags are required for pthreads])
flag=no
case "${host_cpu}-${host_os}" in
*-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
*solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
esac
AC_MSG_RESULT(${flag})
if test "x$flag" != xno; then
PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
fi
LIBS="$save_LIBS"
CFLAGS="$save_CFLAGS"
# More AIX lossage: must compile with cc_r
AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC})
else
PTHREAD_CC="$CC"
fi
AC_SUBST(PTHREAD_LIBS)
AC_SUBST(PTHREAD_CFLAGS)
AC_SUBST(PTHREAD_CC)
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
if test x"$acx_pthread_ok" = xyes; then
ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
:
else
acx_pthread_ok=no
$2
fi
AC_LANG_RESTORE
])dnl ACX_PTHREAD

24
admin/Makefile.am Normal file
View file

@ -0,0 +1,24 @@
# Copyright (C) Lumiera.org
# 2008, Christian Thaeter <ct@pipapo.org>
#
# 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 2 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, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
admin_srcdir = $(top_srcdir)/admin
noinst_PROGRAMS += vgsuppression
vgsuppression_SOURCES = $(admin_srcdir)/vgsuppression.c
vgsuppression_CPPFLAGS = $(AM_CPPFLAGS) -std=gnu99 -Wall -Werror -I$(top_srcdir)/src/
vgsuppression_LDADD = liblumi.a -lnobugmt -lpthread -ldl

25
admin/headercheck Executable file
View file

@ -0,0 +1,25 @@
#!/bin/bash
# This is a small tool which checks that all headers are sufficiently standalone
# and include anything they need.
# In future we might extend this to find out bogus includes by predefining (-D)
# headerguards they include, effectively disableing this include for a test.
find src -name '*.h' | while read header; do
echo -e "testing $header"
awk 'BEGIN {print "#include \""ARGV[1]"\"\nint main(){"}
/^(struct|enum|class).*[^;]$/{print "\t" $0 " test_" NR "; (void) test_"NR";" }
END {print "\treturn 0;\n}"}' $header >,headertest.c
gcc -D_GNU_SOURCE -DEBUG_ALPHA -std=gnu99 -Werror -Wall -I src -c ,headertest.c
echo
done
find src -name '*.hpp' | while read header; do
echo -e "testing $header"
awk 'BEGIN {print "#include \""ARGV[1]"\"\nint main(){"}
/^(struct|enum|class).*[^;]$/{print "\t" $0 " test_" NR "; (void) test_"NR";" }
END {print "\treturn 0;\n}"}' $header >,headertest.cpp
g++ -D_GNU_SOURCE -DEBUG_ALPHA -Werror -Wall -I src -c ,headertest.cpp
echo
done

135
admin/lumiera_c_skeleton Executable file
View file

@ -0,0 +1,135 @@
#!/bin/bash
if test $# -lt 2; then
cat <<EOF
usage:
$0 name description...
creates C skeleton files name.h and name.c for lumiera
and adds them to the Makefile.am in the current dir
EOF
exit
fi
NAME="$1"
NAME_UPPER="$(echo -n ${NAME} | tr [:lower:] [:upper:])"
shift
DESCRIPTION="$*"
test -f ${NAME}.h || cat >${NAME}.h <<EOF
/*
${NAME}.h - ${DESCRIPTION}
Copyright (C) Lumiera.org
$(date +%Y), $(git config user.name) <$(git config user.email)>
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 2 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, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef LUMIERA_${NAME_UPPER}_H
#define LUMIERA_${NAME_UPPER}_H
//TODO: Support library includes//
//TODO: Forward declarations//
//TODO: Lumiera header includes//
//TODO: System includes//
#include <nobug.h>
/**
* @file
*
*/
//TODO: declarations go here//
#endif
/*
// Local Variables:
// mode: C
// c-file-style: "gnu"
// indent-tabs-mode: nil
// End:
*/
EOF
test -f ${NAME}.c || cat >${NAME}.c <<EOF
/*
${NAME}.c - ${DESCRIPTION}
Copyright (C) Lumiera.org
$(date +%Y), $(git config user.name) <$(git config user.email)>
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 2 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, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
//TODO: Support library includes//
//TODO: Lumiera header includes//
#include "${PWD##*/}/${NAME}.h"
//TODO: internal/static forward declarations//
//TODO: System includes//
/**
* @file
*
*/
NOBUG_DEFINE_FLAG_PARENT (${NAME}, /*TODO insert parent flag here */);
//code goes here//
/*
// Local Variables:
// mode: C
// c-file-style: "gnu"
// indent-tabs-mode: nil
// End:
*/
EOF
test -f Makefile.am && ed Makefile.am >/dev/null <<EOF
/\.c\'/s/\(\$(.*)\)\(.*\)\.c\'/\1\2.c \\\\\\
\1\/${NAME}.c/
/\.h\'/s/\(\$(.*)\)\(.*\)\.h\'/\1\2.h \\\\\\
\1\/${NAME}.h/
wq
EOF

View file

@ -0,0 +1,8 @@
#/bin/sh
echo "syncing tiddlywikis"
rsync -rLz --partial --del --exclude backups wiki/ lumiera.org:/var/www/wiki
echo "syncing doxygen documentation"
rsync -rz --partial --del doc/devel/html/ lumiera.org:/var/www/doxy

View file

@ -1,5 +1,5 @@
/* /*
framerate.c - framerate calculations vgsuppression.c - Helper program to generate valgrind suppression files
Copyright (C) Lumiera.org Copyright (C) Lumiera.org
2008, Christian Thaeter <ct@pipapo.org> 2008, Christian Thaeter <ct@pipapo.org>
@ -18,13 +18,21 @@
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#define _GNU_SOURCE
#include "lib/error.h" /*
just place any problematic calls where valgrind whines about in main (with comments please)
*/
/** #include "lib/safeclib.h"
* @file Framerate calculations.
*/
LUMIERA_ERROR_DEFINE(FRAMERATE_ILLEGAL_TIME, "invalid time given"); int
LUMIERA_ERROR_DEFINE(FRAMERATE_ILLEGAL_FRAME, "invalid frame given"); main ()
{
/* debian etch glibc is lazy about cleaning up TLS */
lumiera_tmpbuf_provide (100);
lumiera_tmpbuf_freeall ();
return 0;
}

3
admin/vgsuppression_gen.sh Executable file
View file

@ -0,0 +1,3 @@
#!/bin/sh
valgrind --leak-check=yes --show-reachable=yes --gen-suppressions=all ./vgsuppression 2>&1 | sed '/==[0-9]*==/d;'

View file

@ -37,11 +37,15 @@ AC_PROG_LIBTOOL
# test for headers # test for headers
# #
AC_STDC_HEADERS AC_STDC_HEADERS
AC_CHECK_HEADER([pthread.h], AC_DEFINE(HAVE_PTHREAD_H))
AC_CHECK_HEADER([nobug.h], AC_DEFINE(HAVE_NOBUG_H)) AC_CHECK_HEADER([nobug.h], AC_DEFINE(HAVE_NOBUG_H))
AC_CHECK_HEADER([execinfo.h], AC_DEFINE(HAVE_EXECINFO_H)) AC_CHECK_HEADER([execinfo.h], AC_DEFINE(HAVE_EXECINFO_H))
# there is a warning in nobug, disabled til fixed AC_CHECK_HEADER([valgrind/valgrind.h], AC_DEFINE(HAVE_VALGRIND_VALGRIND_H)) # there is a warning in nobug, disabled til fixed AC_CHECK_HEADER([valgrind/valgrind.h], AC_DEFINE(HAVE_VALGRIND_VALGRIND_H))
ACX_PTHREAD
##AM_CONDITIONAL([HAVE_THREADING], [test x"$acx_pthread_ok" = xyes])
# #
# user options # user options
# #

View file

@ -44,7 +44,7 @@ SUBGROUPING = YES
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Build related configuration options # Build related configuration options
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
EXTRACT_ALL = YES EXTRACT_ALL = NO
EXTRACT_PRIVATE = YES EXTRACT_PRIVATE = YES
EXTRACT_STATIC = YES EXTRACT_STATIC = YES
EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_CLASSES = YES

57
doc/devel/nobug_flags.txt Normal file
View file

@ -0,0 +1,57 @@
NoBug debugging flags hierachy
==============================
NoBug logging is controlled by flags which can be configured with the
NOBUG_LOG environment variable. This flags can be hierachically
organized.
The documentation about this hierachy is maintained here:
(PLANNED, not all are implemented yet)
all # global logging
lumiera # standard
library # all support library
plugin # plugin loader
backend # all backend
file_all # filehandling subsystem
file # file access
filedescriptor # internal filedescriptors
filehandle # posix filehandles
filehandlecache # mrucache for filehandles
map_all # file mapping subsystem
cache_all # caching subsystem
scheduler_all # all scheduler
threads # threadpool management
tasks # work requests
hard # high priority queue
idle # low priority queue
proc # all proc
gui # all gui
detail # highly expensive logging
profiler # performance stats
event # controling events
ui # by user interface
script # by script
Explanation
-----------
We have 2 main log flag hierachies, 'all' and 'event'.
* 'all' reflects the application progress and will be used for
debugging the application by the programmers. This is exposed in 2
subgroups: 'lumiera' which is used for normal application logging
and, 'detail' which contains logging which might be time critical,
expensive or of very high volume.
* 'event' logs user actions like GUI clicking, menu selections giving
an idea how a bug was triggered.
Later on this main hierachies will run in different ringbuffers.
In Short
--------
use NOBUG_LOG=lumiera

37
src/backend/Makefile.am Normal file
View file

@ -0,0 +1,37 @@
# Copyright (C) Lumiera.org
# 2008, Christian Thaeter <ct@pipapo.org>
#
# 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 2 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, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
liblumibackend_a_srcdir = $(top_srcdir)/src/backend
noinst_LIBRARIES += liblumibackend.a
liblumibackend_a_CFLAGS = $(CFLAGS) -std=gnu99 -Wall -Werror
liblumibackend_a_CPPFLAGS = -I$(top_srcdir)/src/
liblumibackend_a_SOURCES = \
$(liblumibackend_a_srcdir)/backend.c \
$(liblumibackend_a_srcdir)/file.c \
$(liblumibackend_a_srcdir)/filehandle.c \
$(liblumibackend_a_srcdir)/filedescriptor.c \
$(liblumibackend_a_srcdir)/filehandlecache.c
noinst_HEADERS += \
$(liblumibackend_a_srcdir)/backend.h \
$(liblumibackend_a_srcdir)/file.h \
$(liblumibackend_a_srcdir)/filehandle.h \
$(liblumibackend_a_srcdir)/filedescriptor.h \
$(liblumibackend_a_srcdir)/filehandlecache.h

View file

@ -1,4 +1,4 @@
TESTING "test system selftest" cat TESTING "test system selftest" /bin/cat
TEST "test cat'ing stdin to stdout" <<END TEST "test cat'ing stdin to stdout" <<END
in: foo: bar in: foo: bar
@ -7,7 +7,7 @@ return: 0
END END
TEST "test stderr, cat'ing noonexistant file" ,nonexistent_file <<END TEST "test stderr, cat'ing noonexistant file" ,nonexistent_file <<END
err: cat: ,nonexistent_file: No such file or directory err: /bin/cat: ,nonexistent_file: No such file or directory
return: 1 return: 1
END END

View file

@ -23,7 +23,6 @@ test_error_SOURCES = $(tests_srcdir)/error/errortest.c
test_error_CPPFLAGS = $(AM_CPPFLAGS) -std=gnu99 -Wall -Werror -I$(top_srcdir)/src/ test_error_CPPFLAGS = $(AM_CPPFLAGS) -std=gnu99 -Wall -Werror -I$(top_srcdir)/src/
test_error_LDADD = liblumi.a -lnobugmt -lpthread -ldl test_error_LDADD = liblumi.a -lnobugmt -lpthread -ldl
check_PROGRAMS += test-locking check_PROGRAMS += test-locking
test_locking_SOURCES = \ test_locking_SOURCES = \
$(tests_srcdir)/locking/test-locking.c \ $(tests_srcdir)/locking/test-locking.c \

View file

@ -1,65 +0,0 @@
/*
test-locking.c - test locking functions
Copyright (C) Lumiera.org
2008, Christian Thaeter <ct@pipapo.org>
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 2 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, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <stdio.h>
#include <string.h>
#include "lib/condition.h"
LUMIERA_ERROR_DEFINE(TEST, "test error");
#if 0
waiting_thread()
{
lock;
wait;
unlock;
}
signaling_thread()
{
signal();
}
#endif
int
main (int argc, char** argv)
{
NOBUG_INIT;
if (argc == 1)
return 0;
if (!strcmp(argv[1], "conditionforgotunlock"))
{
lumiera_condition c;
lumiera_condition_init (&c);
lumiera_conditionlock NOBUG_CLEANUP(lumiera_conditionlock_ensureunlocked) l;
lumiera_conditionlock_init (&l, &c, LUMIERA_LOCKED);
}
else
return 1;
return 0;
}

View file

@ -29,7 +29,7 @@
export LC_ALL=C export LC_ALL=C
arg0="$0" arg0="$0"
srcdir=$(dirname "$arg0") srcdir="$(dirname "$arg0")"
ulimit -S -t 1 -v 524288 ulimit -S -t 1 -v 524288
valgrind="" valgrind=""
@ -45,7 +45,7 @@ else
fi fi
echo echo
echo ================ ${0##*/} ================ echo "================ ${0##*/} ================"
TESTCNT=0 TESTCNT=0
SKIPCNT=0 SKIPCNT=0
@ -84,7 +84,7 @@ function TEST()
echo "$arg" >>,expect_stderr echo "$arg" >>,expect_stderr
;; ;;
'return') 'return')
expect_return=$arg expect_return="$arg"
;; ;;
*) *)
echo "UNKOWN TEST COMMAND '$cmd'" 1>&2 echo "UNKOWN TEST COMMAND '$cmd'" 1>&2
@ -95,7 +95,7 @@ function TEST()
echo -n "TEST $name: " echo -n "TEST $name: "
echo -en "\nTEST $name: $* " >>,testlog echo -en "\nTEST $name: $* " >>,testlog
case $TESTMODE in case "$TESTMODE" in
*FAST*) *FAST*)
if grep "^TEST $name: .* FAILED" ,testlog.pre >&/dev/null; then if grep "^TEST $name: .* FAILED" ,testlog.pre >&/dev/null; then
MSGOK=" (fixed)" MSGOK=" (fixed)"
@ -121,39 +121,45 @@ function TEST()
fails=0 fails=0
if test -f ,send_stdin; then
cat ,send_stdin | $valgrind $TESTBIN "$@" 2>,stderr >,stdout
else
$valgrind $TESTBIN "$@" 2>,stderr >,stdout
fi &>/dev/null
return=$?
echo -n >,testtmp echo -n >,testtmp
if test -f ,expect_stdout; then if ! test -x $TESTBIN; then
if ! cmp ,expect_stdout ,stdout &>/dev/null; then echo -n >,stdout
echo "unexpected data on stdout" >>,testtmp echo "test binary '$TESTBIN' not found" >,stderr
grep -v ': \(TRACE\|INFO\|NOTICE\|WARNING\|ERR\):' <,stdout >,tmp
diff -ua ,expect_stdout ,tmp >>,testtmp
rm ,tmp
((fails+=1))
fi
fi
if test -f ,expect_stderr; then
if ! cmp ,expect_stderr ,stderr &>/dev/null; then
echo "unexpected data on stderr" >>,testtmp
grep -v ': \(TRACE\|INFO\|NOTICE\|WARNING\|ERR\):' <,stderr >,tmp
diff -ua ,expect_stderr ,tmp >>,testtmp
rm ,tmp
((fails+=1))
fi
fi
if test $expect_return != $return; then
echo "unexpected return value $return" >>,testtmp
((fails+=1)) ((fails+=1))
else
if test -f ,send_stdin; then
cat ,send_stdin | $valgrind $TESTBIN "$@" 2>,stderr >,stdout
else
$valgrind $TESTBIN "$@" 2>,stderr >,stdout
fi &>/dev/null
return=$?
if test -f ,expect_stdout; then
if ! cmp ,expect_stdout ,stdout &>/dev/null; then
echo "unexpected data on stdout" >>,testtmp
grep -v ': \(TRACE\|INFO\|NOTICE\|WARNING\|ERR\):' <,stdout >,tmp
diff -ua ,expect_stdout ,tmp >>,testtmp
rm ,tmp
((fails+=1))
fi
fi
if test -f ,expect_stderr; then
if ! cmp ,expect_stderr ,stderr &>/dev/null; then
echo "unexpected data on stderr" >>,testtmp
grep -v ': \(TRACE\|INFO\|NOTICE\|WARNING\|ERR\):' <,stderr >,tmp
diff -ua ,expect_stderr ,tmp >>,testtmp
rm ,tmp
((fails+=1))
fi
fi
if test "$expect_return" != "$return"; then
echo "unexpected return value $return" >>,testtmp
((fails+=1))
fi
fi fi
if test $fails -eq 0; then if test $fails -eq 0; then
@ -191,7 +197,7 @@ function RUNTESTS()
if test \( ! "${TESTSUITES/*,*/}" \) -a "$TESTSUITES"; then if test \( ! "${TESTSUITES/*,*/}" \) -a "$TESTSUITES"; then
TESTSUITES="{$TESTSUITES}" TESTSUITES="{$TESTSUITES}"
fi fi
for t in $(eval echo $srcdir/*$TESTSUITES*.tests); do for t in $(eval echo "$srcdir/*$TESTSUITES*.tests"); do
echo "$t" echo "$t"
done | sort | uniq | { done | sort | uniq | {
while read i; do while read i; do

View file

@ -1 +0,0 @@
test time and frame calculations

View file

@ -789,20 +789,19 @@ Look at [[Overview]] for the current design proposal
<pre>DataBackend <pre>DataBackend
</pre> </pre>
</div> </div>
<div title="File" modifier="CehTeh" modified="200706271509" created="200706201525" changecount="5"> <div title="File" modifier="CehTeh" modified="200803271341" created="200803271035" changecount="2">
<pre>'File' is the superclass of all possible filetypes, it has a weak reference to a FileHandle which is managed in FileHandleCache, on creation only the existence (when reading) or access for write for new files are checked. 'File' stores some generic metadata about the underlying file and intended use. But actual opening is done on demand. <pre>[[File]] associates a filename with the underlying FileDescriptor. This allows [[File]]s which have serveral names (hardlinks) to share a underlying backend.</pre>
</div>
<div title="FileDescriptor" modifier="CehTeh" modified="200803271036" created="200706201525" changecount="2">
<pre>'FileDescriptor' is the superclass of all possible filetypes, it has a weak reference to a FileHandle which is managed in FilehandleCache, on creation only the existence (when reading) or access for write for new files are checked. 'FileDescriptor' stores some generic metadata about the underlying file and intended use. But actual opening is done on demand.
Files content is memory mapped into the process address space, this is managed by FileMap objects and a FileMapCache. The content is memory mapped into the process address space, this is managed by FileMap objects and a FileMapCache.
</pre> </pre>
</div> </div>
<div title="FileHandle" modifier="CehTeh" modified="200706202208" created="200706201535" changecount="2"> <div title="FileHandle" modifier="CehTeh" modified="200706202208" created="200706201535" changecount="2">
<pre>'FileHandle's are managed by the FileHandleCache, they are just storing the underlying OS file handles and managed in a lazy/weak way, (re)opened when needed and aging in the cache when not needed, since the amount of open file handles is limited aged ones will be closed and reused when the system needs to open another file. <pre>'FileHandle's are managed by the FileHandleCache, they are just storing the underlying OS file handles and managed in a lazy/weak way, (re)opened when needed and aging in the cache when not needed, since the amount of open file handles is limited aged ones will be closed and reused when the system needs to open another file.
</pre> </pre>
</div> </div>
<div title="FileHandleCache" modifier="CehTeh" modified="200706271508" created="200706201548" changecount="5">
<pre>'FileHandleCache' storing a finite maximum number of [[FileHandle]]s as a list. As long the configured maximum of open files is not reached new file handles are stored at the begin of the list. Whenever a filehandle is accessed it is moved to the begin of the list too. Unused filehandles propagate towards the end of the list. When the maximum of open filehandles is reached, aged filehandles are closed and taken from the end.
</pre>
</div>
<div title="FileMap" modifier="MichaelPloujnikov" modified="200706270315" created="200706201921" changecount="11"> <div title="FileMap" modifier="MichaelPloujnikov" modified="200706270315" created="200706201921" changecount="11">
<pre>Each 'FileMap' object contains many [[Frame]]s. The actual layout depends on the type of the [[File]]. Mappings need to be page aligned while [[Frame]]s can be anywhere within a file and dynamically sized. <pre>Each 'FileMap' object contains many [[Frame]]s. The actual layout depends on the type of the [[File]]. Mappings need to be page aligned while [[Frame]]s can be anywhere within a file and dynamically sized.
@ -816,6 +815,10 @@ FileMap objects are transparent to the application. It will only requests [[Fram
Whenever a FileMap is in use, it is checked out into an in-use list where it is not subject to aging. Whenever a FileMap is in use, it is checked out into an in-use list where it is not subject to aging.
</pre> </pre>
</div> </div>
<div title="FilehandleCache" modifier="CehTeh" modified="200803271025" created="200706201548" changecount="2">
<pre>'FilehandleCache' storing a finite maximum number of [[FileHandle]]s as a list. As long the configured maximum of open files is not reached new file handles are stored at the begin of the list. Whenever a filehandle is accessed it is moved to the begin of the list too. Unused filehandles propagate towards the end of the list. When the maximum of open filehandles is reached, aged filehandles are closed and taken from the end.
</pre>
</div>
<div title="Frame" modifier="CehTeh" modified="200706271506" created="200706202115" changecount="13"> <div title="Frame" modifier="CehTeh" modified="200706271506" created="200706202115" changecount="13">
<pre>'Frames' are the smallest datablocks handled by the Backend. The application tells the Backend to make [[File]]s available and then only requests Frames from the Backend. All other datastructures of the backend are private. <pre>'Frames' are the smallest datablocks handled by the Backend. The application tells the Backend to make [[File]]s available and then only requests Frames from the Backend. All other datastructures of the backend are private.
@ -1254,7 +1257,7 @@ Storage and logging of EDL's, unlimited undo, database,...
When to Cache and when not to cache, aka instant [[Frame]] reuse When to Cache and when not to cache, aka instant [[Frame]] reuse
</pre> </pre>
</div> </div>
<div title="Overview" modifier="CehTeh" modified="200706271504" created="200706200040" changecount="12"> <div title="Overview" modifier="CehTeh" modified="200803271022" created="200706200040" changecount="13">
<pre>Whenever Lumiera needs to access data this is done through the DataBackend described here. <pre>Whenever Lumiera needs to access data this is done through the DataBackend described here.
There are two main kinds how data is handled: There are two main kinds how data is handled:
@ -1263,7 +1266,7 @@ There are two main kinds how data is handled:
The backend uses memory mapping to make data available to the program. This is little different to more common open/read/write/close file access while giving superior performance and much better memory utilization. The backend uses memory mapping to make data available to the program. This is little different to more common open/read/write/close file access while giving superior performance and much better memory utilization.
The data backend must be capable to handle more data than will fit into the memory or even address space on 32 bit architectures. Moreover a project may access more files than the OS can handle at a time, thus the for [[File]]s used by the Backend it needs a FileHandleCache to manage filehandles dynamically. The data backend must be capable to handle more data than will fit into the memory or even address space on 32 bit architectures. Moreover a project may access more files than the OS can handle at a time, thus the for [[File]]s used by the Backend it needs a FilehandleCache to manage filehandles dynamically.
Which parts of a File are actually mapped to physical RAM is managed by the kernel, it keeps a FileMapCache to manage the [[FileMap]]s we've set up. Which parts of a File are actually mapped to physical RAM is managed by the kernel, it keeps a FileMapCache to manage the [[FileMap]]s we've set up.

11615
wiki/compatibility.html Normal file

File diff suppressed because it is too large Load diff

View file

@ -776,72 +776,6 @@ for __Running__</pre>
* provide central interface for setting switches and configuration options * provide central interface for setting switches and configuration options
* installing of some or all created artifacts</pre> * installing of some or all created artifacts</pre>
</div> </div>
<div title="LumieraDesignProcess" modifier="MichaelPloujnikov" modified="200706270317" created="200706181202" tags="process" changecount="5">
<pre>! Lumiera design process
A lightweight formalized process how people can add proposals for the Lumiera development.
!! Description
Use the Wiki at http://www.pipapo.org/pipawiki/Lumiera/DesignProcess to make it easy to add proposals in a well defined manner.
I'd like to introduce a slightly formalized process for the ongoing Lumiera planning:
* Every proposal is instantiated as 'Idea', the author gives other people the opportunity to review and comment on it with extreme prejudice, while still working out details.
* When the the 'Idea' in a proper form and worked out in most details it becomes a 'Draft'. This 'Draft' need to be carefully reviewed, commented, perhaps corrected and rated by the other Developers.
* At some point we may decide that a 'Draft' becomes a 'Final' (I leave it open how this decision shall be done for now). 'Final' Documents will be imported into the repository (this wiki, you are reading such a Document right now!).
* Sometimes proposals will become dropped for some reason, this is indicated by changing their state to 'Dropped', they still stay in the system for further reference.
!!! Pros
* simple
* flexible
* no much rules
* persistent and at Final stage well documented process
!!! Cons
* could be abused/vandalized (but wiki can use ACL's)
* depends on my server, this might be unfavorable or unreliable, ymmv.
* will only work if all or almost all involved people agree on this process
!!! Alternatives
We could use some forum, Trac, Mailinglist or whatever instead.
Just for Design documentation I would give [[Bouml|http://bouml.free.fr/]] a try. For myself, I am not very fond of UML Design tools, while Bouml looks quite promising and we could maintain the UML model in git repositories which would be more favorable than this centralized wiki. The backside is that this needs even more agreement between the developers, everyone has to install and use Bouml (and learn its usage) and design is constrained by a external tool.
This distributed wiki might be used instead the pipapo.org wiki, investigate that for future.
!! Rationale
Wiki works. It is simple to use and just flexible enough to handle the task. I don't go to install any other software for such tasks on my server. While the design progresses I'd propose to move our work into git repositories and eventually phase this wiki pages out anyways. I'd rather like to start out distributed/git right away .. but git gives us only a fine storage layer, for a design process we need some good presentation layer (later when using git and starting the implementation everyones favorite editor serves for that) I have no better ideas yet to solve the presentation problem other than using this wiki (or maybe Bouml).
</pre>
</div>
<div title="LumieraWiki" modifier="Ichthyostega" modified="200708170218" created="200706172308" tags="portal" changecount="29">
<pre>This is the entry point to several [[TiddlyWiki]]-Pages containing the developer and design documentation for Lumiera.
* Cehteh started GitNotes where we will collect some information about git, howto and special setups
* since we prefer gpg signed tags in git and not each developer knows gpg well here is a Micro-GPG-HowTo
* we maintain (semi-) final design docs in DesignDocumentation
* Things get often worked out on IRC, see IRC-Transcripts for decisions made there and not yet put into the proper documentation places
Please __end your tiddlers in a newline__, this makes merging in git easier since the /pre tag used in tiddlywiki will become on a single line.
----
!Design Draft
to get started, we create design drafts emphasizing different aspects and regions of Lumiera
* Ichthyo focuses mainly on the Render Engine and its interconnection to the EDL, [[see this separate page|renderengine.html]]
* Cehteh works on the data backend draft, see [[this page|backend.html]]
* Some tools which don't fit somewhere else and are used everywhere are put into a [[Support Library|support_library.html]]
* [[Description of the Test System|TestSh]]
!Coding Structures
next we should //start thinking// on how to organize several aspects of the practical coding...
* what to do in BOUML? &amp;rarr; [[more|whatInBOUML]]
* how to organize packages, files, includes? &amp;rarr; [[more|SrcTreeStructure]]
* how to organize the executable to be built?
* what coding conventions to prefer? &amp;rarr; [[GNU Style|DesignDocumentation]]
* what [[build system|BuildSystem]] to use?
* various [[build dependencies|BuildDependenceis]]
* TestSuite</pre>
</div>
<div title="DefaultTiddlers" modifier="CehTeh" modified="200707111115" created="200706172308" changecount="3"> <div title="DefaultTiddlers" modifier="CehTeh" modified="200707111115" created="200706172308" changecount="3">
<pre>LumieraWiki <pre>LumieraWiki
ShortCuts</pre> ShortCuts</pre>
@ -1407,9 +1341,77 @@ config.formatters.push( {
} ) } )
//}}}</pre> //}}}</pre>
</div> </div>
<div title="MainMenu" modifier="CehTeh" modified="200707111114" created="200706172305" changecount="4"> <div title="LumieraDesignProcess" modifier="MichaelPloujnikov" modified="200706270317" created="200706181202" tags="process" changecount="5">
<pre>! Lumiera design process
A lightweight formalized process how people can add proposals for the Lumiera development.
!! Description
Use the Wiki at http://www.pipapo.org/pipawiki/Lumiera/DesignProcess to make it easy to add proposals in a well defined manner.
I'd like to introduce a slightly formalized process for the ongoing Lumiera planning:
* Every proposal is instantiated as 'Idea', the author gives other people the opportunity to review and comment on it with extreme prejudice, while still working out details.
* When the the 'Idea' in a proper form and worked out in most details it becomes a 'Draft'. This 'Draft' need to be carefully reviewed, commented, perhaps corrected and rated by the other Developers.
* At some point we may decide that a 'Draft' becomes a 'Final' (I leave it open how this decision shall be done for now). 'Final' Documents will be imported into the repository (this wiki, you are reading such a Document right now!).
* Sometimes proposals will become dropped for some reason, this is indicated by changing their state to 'Dropped', they still stay in the system for further reference.
!!! Pros
* simple
* flexible
* no much rules
* persistent and at Final stage well documented process
!!! Cons
* could be abused/vandalized (but wiki can use ACL's)
* depends on my server, this might be unfavorable or unreliable, ymmv.
* will only work if all or almost all involved people agree on this process
!!! Alternatives
We could use some forum, Trac, Mailinglist or whatever instead.
Just for Design documentation I would give [[Bouml|http://bouml.free.fr/]] a try. For myself, I am not very fond of UML Design tools, while Bouml looks quite promising and we could maintain the UML model in git repositories which would be more favorable than this centralized wiki. The backside is that this needs even more agreement between the developers, everyone has to install and use Bouml (and learn its usage) and design is constrained by a external tool.
This distributed wiki might be used instead the pipapo.org wiki, investigate that for future.
!! Rationale
Wiki works. It is simple to use and just flexible enough to handle the task. I don't go to install any other software for such tasks on my server. While the design progresses I'd propose to move our work into git repositories and eventually phase this wiki pages out anyways. I'd rather like to start out distributed/git right away .. but git gives us only a fine storage layer, for a design process we need some good presentation layer (later when using git and starting the implementation everyones favorite editor serves for that) I have no better ideas yet to solve the presentation problem other than using this wiki (or maybe Bouml).
</pre>
</div>
<div title="LumieraWiki" modifier="Ichthyostega" modified="200708170218" created="200706172308" tags="portal" changecount="29">
<pre>This is the entry point to several [[TiddlyWiki]]-Pages containing the developer and design documentation for Lumiera.
* Cehteh started GitNotes where we will collect some information about git, howto and special setups
* since we prefer gpg signed tags in git and not each developer knows gpg well here is a Micro-GPG-HowTo
* we maintain (semi-) final design docs in DesignDocumentation
* Things get often worked out on IRC, see IRC-Transcripts for decisions made there and not yet put into the proper documentation places
Please __end your tiddlers in a newline__, this makes merging in git easier since the /pre tag used in tiddlywiki will become on a single line.
----
!Design Draft
to get started, we create design drafts emphasizing different aspects and regions of Lumiera
* Ichthyo focuses mainly on the Render Engine and its interconnection to the EDL, [[see this separate page|renderengine.html]]
* Cehteh works on the data backend draft, see [[this page|backend.html]]
* Some tools which don't fit somewhere else and are used everywhere are put into a [[Support Library|support_library.html]]
* [[Description of the Test System|TestSh]]
!Coding Structures
next we should //start thinking// on how to organize several aspects of the practical coding...
* what to do in BOUML? &amp;rarr; [[more|whatInBOUML]]
* how to organize packages, files, includes? &amp;rarr; [[more|SrcTreeStructure]]
* how to organize the executable to be built?
* what coding conventions to prefer? &amp;rarr; [[GNU Style|DesignDocumentation]]
* what [[build system|BuildSystem]] to use?
* various [[build dependencies|BuildDependenceis]]
* TestSuite</pre>
</div>
<div title="MainMenu" modifier="CehTeh" modified="200803281345" created="200706172305" changecount="6">
<pre>GettingStarted <pre>GettingStarted
[[LumieraWiki]] [[LumieraWiki]]
[[Compatibility|compatibility.html]]
[[ToDo|todo.html]]
[[Backend|backend.html]] [[Backend|backend.html]]
[[Proc-Layer|renderengine.html]] [[Proc-Layer|renderengine.html]]
[[Support-Library|support_library.html]] [[Support-Library|support_library.html]]
@ -1432,7 +1434,7 @@ Some of these things work quite well, there is an overall friendly relation betw
But there are some bad things too. Notably there is not much progress on the community development. Users don't benefit from new improvements which other people have made. There is a endlessly growing list of bugs and feature requests, when someone sends a patch to the ML he has to invest quite some time to maintain it until it might be merged. Finally we don't know what heroine virtual is working on, until we see his next tarball. But there are some bad things too. Notably there is not much progress on the community development. Users don't benefit from new improvements which other people have made. There is a endlessly growing list of bugs and feature requests, when someone sends a patch to the ML he has to invest quite some time to maintain it until it might be merged. Finally we don't know what heroine virtual is working on, until we see his next tarball.
!! Solution for "Cinelerra3" / Lumiera !! Solution for &quot;Cinelerra3&quot; / Lumiera
Cinelerra is heroine's product, this time we should work together with him to make it pleasant and progressing for anyone. Cinelerra is heroine's product, this time we should work together with him to make it pleasant and progressing for anyone.
We are in need of a new development model which is acceptable by all involved people and benefits from the way Cinelerra development worked the years before, without maintaining the bad sides again: We are in need of a new development model which is acceptable by all involved people and benefits from the way Cinelerra development worked the years before, without maintaining the bad sides again:

View file

@ -643,6 +643,11 @@ TertiaryMid: #999
TertiaryDark: #666 TertiaryDark: #666
Error: #f88</pre> Error: #f88</pre>
</div> </div>
<div title="Cuckoo" modifier="CehTeh" modified="200803281418" created="200803281417" changecount="2">
<pre>This hashing gives guaranteed O(1) lookup complexity and amortized O(1) insert and remove complexity. Hash tables by default grow and shrink automatically. It is posible to preallocate entries and turn automatic shrinking off taking out the memory management factors for insert and remove operations. This implementation uses 3 Tables which exponential growing sizes.
Hash table utilization is commonly between 40-80% which gives better memory usage and far better locality than trees.</pre>
</div>
<div title="DefaultTiddlers" modifier="CehTeh" modified="200707102306" created="200707102301" changecount="2"> <div title="DefaultTiddlers" modifier="CehTeh" modified="200707102306" created="200707102301" changecount="2">
<pre>[[SupportLibrary]]</pre> <pre>[[SupportLibrary]]</pre>
</div> </div>
@ -2188,6 +2193,31 @@ config.macros.rssFeedUpdate = {
//}}} //}}}
</pre> </pre>
</div> </div>
<div title="SafeCLib" modifier="CehTeh" modified="200803281413" created="200803281406" changecount="4">
<pre>! Memory allocation
* lumiera_malloc()
Succceeds or dies, no need for error handling.
! String functions
Small wrapers and extensions to the string.h functions, handle NULL pointers gracefully.
* lumiera_strndup()
Succceeds or dies, no need for error handling.
* lumiera_strncmp() lumiera_streq()
Optimized comparing same addresses.
! Round robin temporary buffers
Provides 64 buffers per thread which are recycled with each use, the idea here is to have fast buffers for temporal data without need for explicit heap management or stack waste.
* lumiera_tmpbuf_provide ()
Acquire a temporary buffer. doesn't need to be freed. Stays valid for the next 63 tmpbuf calls.
* lumiera_tmpbuf_strndup ()
Duplicate string to a tmpbuf.
* lumiera_tmpbuf_sprintf ()
Construct a string in a tmpbuf.
</pre>
</div>
<div title="SelectingInterfaces" modifier="CehTeh" created="200708120132" changecount="2"> <div title="SelectingInterfaces" modifier="CehTeh" created="200708120132" changecount="2">
<pre>Each Plugin can export different Interfaces, even same interfaces with different capabilities like a effect for different color models or such. <pre>Each Plugin can export different Interfaces, even same interfaces with different capabilities like a effect for different color models or such.
@ -2419,7 +2449,7 @@ h1,h2,h3,h4,h5,h6 {
/*}}}*/ /*}}}*/
</pre> </pre>
</div> </div>
<div title="SupportLibrary" modifier="CehTeh" modified="200709021227" created="200707102314" changecount="9"> <div title="SupportLibrary" modifier="CehTeh" modified="200803281414" created="200707102314" changecount="11">
<pre>The Support Library contains all tools we need at various places, but by themselves don't defines a subsystem on their own. <pre>The Support Library contains all tools we need at various places, but by themselves don't defines a subsystem on their own.
These things are: These things are:
@ -2428,8 +2458,9 @@ These things are:
* a wrapper for POSIX Threads * a wrapper for POSIX Threads
** Thread creation joining and canceling ** Thread creation joining and canceling
** [[Locking primitives like Condition variables and Mutexes|LockingPrimitives]] ** [[Locking primitives like Condition variables and Mutexes|LockingPrimitives]]
* [[Frame and Time handling and calculations|FrameAndTime]] * [[Some tools and wrapers around the C library|SafeCLib]]
* [[O(1) hashtable using Cuckoo hashing|Cuckoo]]
(... to be continued) (... to be continued)
</pre> </pre>
</div> </div>

11631
wiki/todo.html Normal file

File diff suppressed because it is too large Load diff