At file:///home/jelmer/bzr.samba/python/ ------------------------------------------------------------ revno: 12009 revision-id: [EMAIL PROTECTED] parent: [EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] committer: Jelmer Vernooij <[EMAIL PROTECTED]> branch nick: python timestamp: Sat 2007-05-05 02:02:47 +0200 message: Merge upstream. added: source/lib/ldb/external/ svn-v2:[EMAIL PROTECTED] source/lib/ldb/external/libpopt.m4 svn-v2:[EMAIL PROTECTED] source/lib/ldb/external/libtalloc.m4 svn-v2:[EMAIL PROTECTED] source/lib/ldb/external/libtdb.m4 svn-v2:[EMAIL PROTECTED] source/lib/ldb/external/pkg.m4 svn-v2:[EMAIL PROTECTED] modified: .bzrignore svn-v2:[EMAIL PROTECTED] source/auth/gensec/gensec_gssapi.c svn-v2:[EMAIL PROTECTED] source/auth/kerberos/krb5_init_context.c svn-v2:[EMAIL PROTECTED] source/build/m4/check_ld.m4 svn-v2:[EMAIL PROTECTED] source/lib/events/events_aio.c svn-v2:[EMAIL PROTECTED] source/lib/events/events_epoll.c svn-v2:[EMAIL PROTECTED] source/lib/events/events_internal.h svn-v2:[EMAIL PROTECTED] source/lib/events/events_select.c svn-v2:[EMAIL PROTECTED] source/lib/events/events_standard.c svn-v2:[EMAIL PROTECTED] source/lib/events/events_timed.c svn-v2:[EMAIL PROTECTED] source/lib/ldb/autogen.sh svn-v2:[EMAIL PROTECTED] source/lib/ldb/configure.ac svn-v2:[EMAIL PROTECTED] source/lib/ldb/include/includes.h svn-v2:[EMAIL PROTECTED] source/lib/replace/autoconf-2.60.m4 svn-v2:[EMAIL PROTECTED] source/lib/replace/test/testsuite.c svn-v2:[EMAIL PROTECTED] source/lib/tdb/Makefile.in svn-v2:[EMAIL PROTECTED] source/lib/tdb/configure.ac svn-v2:[EMAIL PROTECTED] source/libnet/libnet_passwd.c svn-v2:[EMAIL PROTECTED] source/libnet/libnet_rpc.c svn-v2:[EMAIL PROTECTED] source/torture/raw/notify.c svn-v2:[EMAIL PROTECTED] ------------------------------------------------------------ revno: 11989.1.104 merged: svn-v2:[EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] committer: mimir timestamp: Fri 2007-05-04 18:59:51 +0000 message: use composite_create calls instead of talloc_zero. rafal ------------------------------------------------------------ revno: 11989.1.103 merged: svn-v2:[EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] committer: tridge timestamp: Fri 2007-05-04 12:41:28 +0000 message: changed the RAW-NOTIFY test to support clustered testing (two nodes) ------------------------------------------------------------ revno: 11989.1.102 merged: svn-v2:[EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] committer: metze timestamp: Fri 2007-05-04 11:26:25 +0000 message: fix uninitialized element which was causing a crash with 'net password set' metze ------------------------------------------------------------ revno: 11989.1.101 merged: svn-v2:[EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] parent: [EMAIL PROTECTED] committer: jelmer timestamp: Fri 2007-05-04 11:08:53 +0000 message: Fix ldb build ------------------------------------------------------------ revno: 11989.1.100.1.1 merged: [EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] committer: Jelmer Vernooij <[EMAIL PROTECTED]> branch nick: SAMBA_4_0 timestamp: Fri 2007-05-04 13:08:32 +0200 message: Fix ldb build ------------------------------------------------------------ revno: 11989.1.100 merged: svn-v2:[EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] committer: metze timestamp: Fri 2007-05-04 10:44:41 +0000 message: revert revision 22640 as it breaks nested structs in idl metze ------------------------------------------------------------ revno: 11989.1.99 merged: svn-v2:[EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] parent: [EMAIL PROTECTED] committer: jelmer timestamp: Fri 2007-05-04 10:02:47 +0000 message: Change version back to 0.9. ------------------------------------------------------------ revno: 11989.1.98.1.1 merged: [EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] committer: Jelmer Vernooij <[EMAIL PROTECTED]> branch nick: SAMBA_4_0 timestamp: Fri 2007-05-04 13:02:19 +0200 message: Change version back to 0.9. ------------------------------------------------------------ revno: 11989.1.98 merged: svn-v2:[EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] committer: metze timestamp: Fri 2007-05-04 09:35:01 +0000 message: disable shared library support on Tru64 metze ------------------------------------------------------------ revno: 11989.1.97 merged: svn-v2:[EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] committer: metze timestamp: Fri 2007-05-04 09:22:52 +0000 message: optimize the handling of directly triggered timed events: - if someone adds a timed_event with a zero timeval we now avoid serval gettimeofday() calls and the event handler doesn't get the current time when it's called, instead we also pass a zero timeval - this also makes sure multiple timed events with a zero timeval are processed in the order there're added. the little benchmark shows that processing 2000000 directly timed events is now much faster, while avoiding syscalls at all! > time ./evtest (with the old code) real 0m6.388s user 0m1.740s sys 0m4.632s > time ./evtest (with the new code) real 0m1.498s user 0m1.496s sys 0m0.004s [EMAIL PROTECTED]:~/devel/samba/4.0/samba4-ci/source> cat evtest.c #include <stdio.h> #include <stdint.h> #include <sys/time.h> #include <talloc.h> #include <events.h> static void dummy_fde_handler(struct event_context *ev_ctx, struct fd_event *fde, uint16_t flags, void *private_data) { } static void timeout_handler(struct event_context *ev, struct timed_event *te, struct timeval tval, void *private_data) { uint32_t *countp = (uint32_t *)private_data; (*countp)++; if (*countp > 2000000) exit(0); event_add_timed(ev, ev, tval, timeout_handler, countp); } int main(void) { struct event_context *ev; struct timeval tval = { 0, 0 }; uint32_t count = 0; ev = event_context_init(NULL); event_add_fd(ev, ev, 0, 0, dummy_fde_handler, NULL); event_add_timed(ev, ev, tval, timeout_handler, &count); return event_loop_wait(ev); } ------------------------------------------------------------ revno: 11989.1.96 merged: svn-v2:[EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] committer: metze timestamp: Fri 2007-05-04 06:59:02 +0000 message: - add AC_GNU_SOURCE macro for systems which don't have it (sles8) - fix compiler warning on some systems metze ------------------------------------------------------------ revno: 11989.1.95 merged: svn-v2:[EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] committer: jelmer timestamp: Wed 2007-05-02 22:05:48 +0000 message: Allow standalone build to work without tdb or talloc checked out, but provided by the system. ------------------------------------------------------------ revno: 11989.1.94 merged: svn-v2:[EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] committer: metze timestamp: Wed 2007-05-02 18:00:02 +0000 message: - generate nicer output - fix compiler warning about unused ';' metze ------------------------------------------------------------ revno: 11989.1.93 merged: svn-v2:[EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] parent: [EMAIL PROTECTED] committer: jelmer timestamp: Wed 2007-05-02 16:09:33 +0000 message: Install tdbbackup and tdbdump again. ------------------------------------------------------------ revno: 11989.1.92.1.1 merged: [EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] committer: Jelmer Vernooij <[EMAIL PROTECTED]> branch nick: SAMBA_4_0 timestamp: Wed 2007-05-02 19:08:22 +0200 message: Install tdbbackup and tdbdump again. ------------------------------------------------------------ revno: 11989.1.92 merged: svn-v2:[EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] committer: metze timestamp: Wed 2007-05-02 09:54:06 +0000 message: make it possible to not turn off dns canonicalization of hostnames with krb5:set_dns_canonicalize=yes needed for the drsuapi replication, but we should fix this with a kdc locator plugin ... metze === added directory 'source/lib/ldb/external' === added file 'source/lib/ldb/external/libpopt.m4' --- a/source/lib/ldb/external/libpopt.m4 1970-01-01 00:00:00 +0000 +++ b/source/lib/ldb/external/libpopt.m4 2007-05-02 22:05:48 +0000 @@ -0,0 +1,7 @@ +POPT_OBJ="" +AC_SUBST(POPT_OBJ) +AC_SUBST(POPT_LIBS) +AC_SUBST(POPT_CFLAGS) + +AC_CHECK_HEADERS(popt.h) +AC_CHECK_LIB(popt, poptGetContext, [ POPT_LIBS="-lpopt" ])
=== added file 'source/lib/ldb/external/libtalloc.m4' --- a/source/lib/ldb/external/libtalloc.m4 1970-01-01 00:00:00 +0000 +++ b/source/lib/ldb/external/libtalloc.m4 2007-05-02 22:05:48 +0000 @@ -0,0 +1,4 @@ +m4_include(pkg.m4) +TALLOC_OBJ="" +AC_SUBST(TALLOC_OBJ) +PKG_CHECK_MODULES(TALLOC, talloc) === added file 'source/lib/ldb/external/libtdb.m4' --- a/source/lib/ldb/external/libtdb.m4 1970-01-01 00:00:00 +0000 +++ b/source/lib/ldb/external/libtdb.m4 2007-05-02 22:05:48 +0000 @@ -0,0 +1,4 @@ +m4_include(pkg.m4) +TDB_OBJ="" +AC_SUBST(TDB_OBJ) +PKG_CHECK_MODULES(TDB, tdb >= 1.1.0) === added file 'source/lib/ldb/external/pkg.m4' --- a/source/lib/ldb/external/pkg.m4 1970-01-01 00:00:00 +0000 +++ b/source/lib/ldb/external/pkg.m4 2007-05-02 22:05:48 +0000 @@ -0,0 +1,157 @@ +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# +# Copyright © 2004 Scott James Remnant <[EMAIL PROTECTED]>. +# +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi + +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# +# Similar to PKG_CHECK_MODULES, make sure that the first instance of +# this or PKG_CHECK_MODULES is called, or make sure to call +# PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_ifval([$2], [$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$PKG_CONFIG"; then + if test -n "$$1"; then + pkg_cv_[]$1="$$1" + else + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], + [pkg_failed=yes]) + fi +else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + ifelse([$4], , [AC_MSG_ERROR(dnl +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT +])], + [AC_MSG_RESULT([no]) + $4]) +elif test $pkg_failed = untried; then + ifelse([$4], , [AC_MSG_FAILURE(dnl +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.])], + [$4]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + ifelse([$3], , :, [$3]) +fi[]dnl +])# PKG_CHECK_MODULES === modified file '.bzrignore' --- a/.bzrignore 2007-05-01 23:24:03 +0000 +++ b/.bzrignore 2007-05-05 00:02:47 +0000 @@ -189,3 +189,5 @@ source/lib/ldb/lib source/lib/ldb/examples/ldbreader source/lib/ldb/examples/ldifreader +source/lib/tdb/bin/tdbbackup +source/lib/tdb/bin/tdbdump === modified file 'source/auth/gensec/gensec_gssapi.c' --- a/source/auth/gensec/gensec_gssapi.c 2007-04-17 03:49:46 +0000 +++ b/source/auth/gensec/gensec_gssapi.c 2007-05-02 09:54:06 +0000 @@ -218,7 +218,7 @@ } /* don't do DNS lookups of any kind, it might/will fail for a netbios name */ - ret = gsskrb5_set_dns_canonicalize(FALSE); + ret = gsskrb5_set_dns_canonicalize(lp_parm_bool(-1, "krb5", "set_dns_canonicalize", false)); if (ret) { DEBUG(1,("gensec_krb5_start: gsskrb5_set_dns_canonicalize failed\n")); talloc_free(gensec_gssapi_state); === modified file 'source/auth/kerberos/krb5_init_context.c' --- a/source/auth/kerberos/krb5_init_context.c 2007-04-30 11:27:41 +0000 +++ b/source/auth/kerberos/krb5_init_context.c 2007-05-02 09:54:06 +0000 @@ -473,7 +473,8 @@ /* Set options in kerberos */ - krb5_set_dns_canonicalize_hostname((*smb_krb5_context)->krb5_context, FALSE); + krb5_set_dns_canonicalize_hostname((*smb_krb5_context)->krb5_context, + lp_parm_bool(-1, "krb5", "set_dns_canonicalize", false)); return 0; } === modified file 'source/build/m4/check_ld.m4' --- a/source/build/m4/check_ld.m4 2007-04-17 13:58:57 +0000 +++ b/source/build/m4/check_ld.m4 2007-05-04 09:35:01 +0000 @@ -135,7 +135,8 @@ fi ;; *osf*) - BLDSHARED="true" + # disabled because tru64 fails to link libtorture.so + BLDSHARED="false" SONAMEFLAG="-Wl,-soname," PICFLAG="-fPIC" ;; === modified file 'source/lib/events/events_aio.c' --- a/source/lib/events/events_aio.c 2007-05-01 21:29:42 +0000 +++ b/source/lib/events/events_aio.c 2007-05-04 09:22:52 +0000 @@ -250,7 +250,8 @@ } if (ret == 0 && tvalp) { - common_event_loop_timer(aio_ev->ev); + /* we don't care about a possible delay here */ + common_event_loop_timer_delay(aio_ev->ev); return 0; } @@ -431,10 +432,8 @@ struct aio_event_context); struct timeval tval; - tval = common_event_loop_delay(ev); - + tval = common_event_loop_timer_delay(ev); if (timeval_is_zero(&tval)) { - common_event_loop_timer(ev); return 0; } === modified file 'source/lib/events/events_epoll.c' --- a/source/lib/events/events_epoll.c 2007-05-01 21:29:42 +0000 +++ b/source/lib/events/events_epoll.c 2007-05-04 09:22:52 +0000 @@ -233,7 +233,8 @@ } if (ret == 0 && tvalp) { - common_event_loop_timer(epoll_ev->ev); + /* we don't care about a possible delay here */ + common_event_loop_timer_delay(epoll_ev->ev); return 0; } @@ -376,10 +377,8 @@ struct epoll_event_context); struct timeval tval; - tval = common_event_loop_delay(ev); - + tval = common_event_loop_timer_delay(ev); if (timeval_is_zero(&tval)) { - common_event_loop_timer(ev); return 0; } === modified file 'source/lib/events/events_internal.h' --- a/source/lib/events/events_internal.h 2007-05-01 21:29:42 +0000 +++ b/source/lib/events/events_internal.h 2007-05-04 09:22:52 +0000 @@ -117,8 +117,7 @@ struct timed_event *common_event_add_timed(struct event_context *, TALLOC_CTX *, struct timeval, event_timed_handler_t, void *); -void common_event_loop_timer(struct event_context *); -struct timeval common_event_loop_delay(struct event_context *); +struct timeval common_event_loop_timer_delay(struct event_context *); struct signal_event *common_event_add_signal(struct event_context *ev, TALLOC_CTX *mem_ctx, === modified file 'source/lib/events/events_select.c' --- a/source/lib/events/events_select.c 2007-05-01 21:29:42 +0000 +++ b/source/lib/events/events_select.c 2007-05-04 09:22:52 +0000 @@ -218,7 +218,8 @@ } if (selrtn == 0 && tvalp) { - common_event_loop_timer(select_ev->ev); + /* we don't care about a possible delay here */ + common_event_loop_timer_delay(select_ev->ev); return 0; } @@ -252,10 +253,8 @@ struct select_event_context); struct timeval tval; - tval = common_event_loop_delay(ev); - + tval = common_event_loop_timer_delay(ev); if (timeval_is_zero(&tval)) { - common_event_loop_timer(ev); return 0; } === modified file 'source/lib/events/events_standard.c' --- a/source/lib/events/events_standard.c 2007-05-01 21:29:42 +0000 +++ b/source/lib/events/events_standard.c 2007-05-04 09:22:52 +0000 @@ -248,7 +248,8 @@ } if (ret == 0 && tvalp) { - common_event_loop_timer(std_ev->ev); + /* we don't care about a possible delay here */ + common_event_loop_timer_delay(std_ev->ev); return 0; } @@ -471,7 +472,8 @@ } if (selrtn == 0 && tvalp) { - common_event_loop_timer(std_ev->ev); + /* we don't care about a possible delay here */ + common_event_loop_timer_delay(std_ev->ev); return 0; } @@ -505,10 +507,8 @@ struct std_event_context); struct timeval tval; - tval = common_event_loop_delay(ev); - + tval = common_event_loop_timer_delay(ev); if (timeval_is_zero(&tval)) { - common_event_loop_timer(ev); return 0; } === modified file 'source/lib/events/events_timed.c' --- a/source/lib/events/events_timed.c 2007-01-05 10:31:54 +0000 +++ b/source/lib/events/events_timed.c 2007-05-04 09:22:52 +0000 @@ -68,9 +68,7 @@ last_te = NULL; for (cur_te = ev->timed_events; cur_te; cur_te = cur_te->next) { /* if the new event comes before the current one break */ - if (!timeval_is_zero(&cur_te->next_event) && - timeval_compare(&te->next_event, - &cur_te->next_event) < 0) { + if (timeval_compare(&te->next_event, &cur_te->next_event) < 0) { break; } @@ -85,16 +83,46 @@ } /* - a timer has gone off - call it + do a single event loop using the events defined in ev + + return the delay untill the next timed event, + or zero if a timed event was triggered */ -void common_event_loop_timer(struct event_context *ev) +struct timeval common_event_loop_timer_delay(struct event_context *ev) { - struct timeval t = timeval_current(); + struct timeval current_time = timeval_zero(); struct timed_event *te = ev->timed_events; - if (te == NULL) { - return; - } + if (!te) { + /* have a default tick time of 30 seconds. This guarantees + that code that uses its own timeout checking will be + able to proceeed eventually */ + return timeval_set(30, 0); + } + + /* + * work out the right timeout for the next timed event + * + * avoid the syscall to gettimeofday() if the timed event should + * be triggered directly + * + * if there's a delay till the next timed event, we're done + * with just returning the delay + */ + if (!timeval_is_zero(&te->next_event)) { + struct timeval delay; + + current_time = timeval_current(); + + delay = timeval_until(¤t_time, &te->next_event); + if (!timeval_is_zero(&delay)) { + return delay; + } + } + + /* + * ok, we have a timed event that we'll process ... + */ /* deny the handler to free the event */ talloc_set_destructor(te, common_event_timed_deny_destructor); @@ -104,33 +132,21 @@ * handler we don't want to come across this event again -- vl */ DLIST_REMOVE(ev->timed_events, te); - te->handler(ev, te, t, te->private_data); + /* + * If the timed event was registered for a zero current_time, + * then we pass a zero timeval here too! To avoid the + * overhead of gettimeofday() calls. + * + * otherwise we pass the current time + */ + te->handler(ev, te, current_time, te->private_data); /* The destructor isn't necessary anymore, we've already removed the * event from the list. */ talloc_set_destructor(te, NULL); talloc_free(te); -} - -/* - do a single event loop using the events defined in ev -*/ -struct timeval common_event_loop_delay(struct event_context *ev) -{ - struct timeval tval; - - /* work out the right timeout for all timed events */ - if (ev->timed_events) { - struct timeval t = timeval_current(); - tval = timeval_until(&t, &ev->timed_events->next_event); - } else { - /* have a default tick time of 30 seconds. This guarantees - that code that uses its own timeout checking will be - able to proceeed eventually */ - tval = timeval_set(30, 0); - } - - return tval; + + return timeval_zero(); } === modified file 'source/lib/ldb/autogen.sh' --- a/source/lib/ldb/autogen.sh 2006-09-05 23:32:35 +0000 +++ b/source/lib/ldb/autogen.sh 2007-05-02 22:05:48 +0000 @@ -7,6 +7,11 @@ IPATHS="$IPATHS -I lib/talloc -I talloc -I ../talloc" IPATHS="$IPATHS -I lib/tdb -I tdb -I ../tdb" IPATHS="$IPATHS -I lib/popt -I popt -I ../popt" + +# Always keep this listed last, so the built-in versions of tdb and talloc +# get used if available. +IPATHS="$IPATHS -I ./external" + autoheader $IPATHS || exit 1 autoconf $IPATHS || exit 1 === modified file 'source/lib/ldb/configure.ac' --- a/source/lib/ldb/configure.ac 2007-04-30 08:08:36 +0000 +++ b/source/lib/ldb/configure.ac 2007-05-04 11:08:53 +0000 @@ -11,7 +11,7 @@ AC_DEFUN([SMB_LIBRARY_ENABLE], [echo -n ""]) AC_DEFUN([SMB_EXT_LIB], [echo -n ""]) AC_DEFUN([SMB_ENABLE], [echo -n ""]) -AC_INIT(ldb, 1.0) +AC_INIT(ldb, 0.9.0) AC_CONFIG_SRCDIR([common/ldb.c]) AC_LIBREPLACE_ALL_CHECKS === modified file 'source/lib/ldb/include/includes.h' --- a/source/lib/ldb/include/includes.h 2007-04-15 21:13:13 +0000 +++ b/source/lib/ldb/include/includes.h 2007-05-02 22:05:48 +0000 @@ -20,7 +20,7 @@ #include "system/filesys.h" #include "system/network.h" #include "system/time.h" -#include "talloc/talloc.h" +#include "talloc.h" #include "ldb.h" #include "ldb_errors.h" #include "ldb_private.h" === modified file 'source/lib/replace/autoconf-2.60.m4' --- a/source/lib/replace/autoconf-2.60.m4 2007-04-23 11:41:38 +0000 +++ b/source/lib/replace/autoconf-2.60.m4 2007-05-05 00:02:47 +0000 @@ -1,3 +1,16 @@ +# AC_GNU_SOURCE +# -------------- +AC_DEFUN([AC_GNU_SOURCE], +[AH_VERBATIM([_GNU_SOURCE], +[/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif])dnl +AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl +AC_BEFORE([$0], [AC_RUN_IFELSE])dnl +AC_DEFINE([_GNU_SOURCE]) +]) + # _AC_C_STD_TRY(STANDARD, TEST-PROLOGUE, TEST-BODY, OPTION-LIST, # ACTION-IF-AVAILABLE, ACTION-IF-UNAVAILABLE) # -------------------------------------------------------------- === modified file 'source/lib/replace/test/testsuite.c' --- a/source/lib/replace/test/testsuite.c 2007-04-16 19:55:51 +0000 +++ b/source/lib/replace/test/testsuite.c 2007-05-04 06:59:02 +0000 @@ -511,7 +511,7 @@ "\tptr: %p - %p = %d != %d\n" \ "]\n", \ __STRING(func), __location__, __STRING(func), \ - str, diff, base, res, _v, _ep, _p, diff - (_ep - _p), diff); \ + str, diff, base, res, _v, _ep, _p, (int)(diff - (_ep - _p)), diff); \ return false; \ } \ } while (0) === modified file 'source/lib/tdb/Makefile.in' --- a/source/lib/tdb/Makefile.in 2007-04-30 10:49:42 +0000 +++ b/source/lib/tdb/Makefile.in 2007-05-02 16:09:33 +0000 @@ -19,8 +19,8 @@ .PHONY: test -PROGS = bin/tdbtool$(EXEEXT) bin/tdbtorture$(EXEEXT) -PROGS_NOINSTALL = bin/tdbtest$(EXEEXT) bin/tdbdump$(EXEEXT) bin/tdbbackup$(EXEEXT) +PROGS = bin/tdbtool$(EXEEXT) bin/tdbdump$(EXEEXT) bin/tdbbackup$(EXEEXT) +PROGS_NOINSTALL = bin/tdbtest$(EXEEXT) bin/tdbtorture$(EXEEXT) ALL_PROGS = $(PROGS) $(PROGS_NOINSTALL) TDB_OBJ = @TDB_OBJ@ @LIBREPLACEOBJ@ === modified file 'source/lib/tdb/configure.ac' --- a/source/lib/tdb/configure.ac 2007-04-30 08:08:36 +0000 +++ b/source/lib/tdb/configure.ac 2007-05-02 16:09:33 +0000 @@ -2,7 +2,7 @@ AC_DEFUN([SMB_MODULE_DEFAULT], [echo -n ""]) AC_DEFUN([SMB_LIBRARY_ENABLE], [echo -n ""]) AC_DEFUN([SMB_ENABLE], [echo -n ""]) -AC_INIT(tdb, 1.1) +AC_INIT(tdb, 1.1.0) AC_CONFIG_SRCDIR([common/tdb.c]) AC_CONFIG_HEADER(include/config.h) AC_LIBREPLACE_ALL_CHECKS === modified file 'source/libnet/libnet_passwd.c' --- a/source/libnet/libnet_passwd.c 2006-11-28 17:30:43 +0000 +++ b/source/libnet/libnet_passwd.c 2007-05-04 11:26:25 +0000 @@ -644,6 +644,7 @@ r2.samr_handle.in.newpassword = r->samr.in.newpassword; r2.samr_handle.in.user_handle = &u_handle; r2.samr_handle.in.dcerpc_pipe = c.out.dcerpc_pipe; + r2.samr_handle.in.info21 = NULL; status = libnet_SetPassword(ctx, mem_ctx, &r2); === modified file 'source/libnet/libnet_rpc.c' --- a/source/libnet/libnet_rpc.c 2006-11-28 21:01:10 +0000 +++ b/source/libnet/libnet_rpc.c 2007-05-04 18:59:51 +0000 @@ -57,15 +57,13 @@ struct composite_context *pipe_connect_req; /* composite context allocation and setup */ - c = talloc_zero(mem_ctx, struct composite_context); - if (c == NULL) return NULL; + c = composite_create(ctx, ctx->event_ctx); + if (c == NULL) return c; s = talloc_zero(c, struct rpc_connect_srv_state); if (composite_nomem(s, c)) return c; - c->state = COMPOSITE_STATE_IN_PROGRESS; c->private_data = s; - c->event_ctx = ctx->event_ctx; s->ctx = ctx; s->r = *r; @@ -218,15 +216,13 @@ struct composite_context *lookup_dc_req; /* composite context allocation and setup */ - c = talloc_zero(mem_ctx, struct composite_context); - if (c == NULL) return NULL; + c = composite_create(ctx, ctx->event_ctx); + if (c == NULL) return c; s = talloc_zero(c, struct rpc_connect_dc_state); if (composite_nomem(s, c)) return c; - c->state = COMPOSITE_STATE_IN_PROGRESS; c->private_data = s; - c->event_ctx = ctx->event_ctx; s->ctx = ctx; s->r = *r; @@ -433,15 +429,13 @@ struct rpc_connect_dci_state *s; /* composite context allocation and setup */ - c = talloc_zero(mem_ctx, struct composite_context); - if (c == NULL) return NULL; + c = composite_create(ctx, ctx->event_ctx); + if (c == NULL) return c; s = talloc_zero(c, struct rpc_connect_dci_state); if (composite_nomem(s, c)) return c; - c->state = COMPOSITE_STATE_IN_PROGRESS; c->private_data = s; - c->event_ctx = ctx->event_ctx; s->ctx = ctx; s->r = *r; === modified file 'source/torture/raw/notify.c' --- a/source/torture/raw/notify.c 2007-02-02 17:30:10 +0000 +++ b/source/torture/raw/notify.c 2007-05-04 12:41:28 +0000 @@ -55,7 +55,8 @@ /* basic testing of change notify on directories */ -static BOOL test_notify_dir(struct smbcli_state *cli, TALLOC_CTX *mem_ctx) +static BOOL test_notify_dir(struct smbcli_state *cli, struct smbcli_state *cli2, + TALLOC_CTX *mem_ctx) { BOOL ret = True; NTSTATUS status; @@ -110,7 +111,7 @@ printf("testing notify mkdir\n"); req = smb_raw_changenotify_send(cli->tree, ¬ify); - smbcli_mkdir(cli->tree, BASEDIR "\\subdir-name"); + smbcli_mkdir(cli2->tree, BASEDIR "\\subdir-name"); status = smb_raw_changenotify_recv(req, mem_ctx, ¬ify); CHECK_STATUS(status, NT_STATUS_OK); @@ -122,7 +123,7 @@ printf("testing notify rmdir\n"); req = smb_raw_changenotify_send(cli->tree, ¬ify); - smbcli_rmdir(cli->tree, BASEDIR "\\subdir-name"); + smbcli_rmdir(cli2->tree, BASEDIR "\\subdir-name"); status = smb_raw_changenotify_recv(req, mem_ctx, ¬ify); CHECK_STATUS(status, NT_STATUS_OK); @@ -132,10 +133,10 @@ printf("testing notify mkdir - rmdir - mkdir - rmdir\n"); - smbcli_mkdir(cli->tree, BASEDIR "\\subdir-name"); - smbcli_rmdir(cli->tree, BASEDIR "\\subdir-name"); - smbcli_mkdir(cli->tree, BASEDIR "\\subdir-name"); - smbcli_rmdir(cli->tree, BASEDIR "\\subdir-name"); + smbcli_mkdir(cli2->tree, BASEDIR "\\subdir-name"); + smbcli_rmdir(cli2->tree, BASEDIR "\\subdir-name"); + smbcli_mkdir(cli2->tree, BASEDIR "\\subdir-name"); + smbcli_rmdir(cli2->tree, BASEDIR "\\subdir-name"); req = smb_raw_changenotify_send(cli->tree, ¬ify); status = smb_raw_changenotify_recv(req, mem_ctx, ¬ify); CHECK_STATUS(status, NT_STATUS_OK); @@ -174,11 +175,14 @@ notify.nttrans.in.file.fnum = fnum; req = smb_raw_changenotify_send(cli->tree, ¬ify); + status = smbcli_unlink(cli->tree, BASEDIR "\\nonexistant.txt"); + CHECK_STATUS(status, NT_STATUS_OBJECT_NAME_NOT_FOUND); + /* (1st unlink) as the 2nd notify directly returns, this unlink is only seen by the 1st notify and the 3rd notify (later) */ printf("testing notify on unlink for the first file\n"); - status = smbcli_unlink(cli->tree, BASEDIR "\\test0.txt"); + status = smbcli_unlink(cli2->tree, BASEDIR "\\test0.txt"); CHECK_STATUS(status, NT_STATUS_OK); /* receive the reply from the 2nd notify */ @@ -186,24 +190,27 @@ CHECK_STATUS(status, NT_STATUS_OK); CHECK_VAL(notify.nttrans.out.num_changes, count); - for (i=1;i<notify.nttrans.out.num_changes;i++) { + for (i=1;i<count;i++) { CHECK_VAL(notify.nttrans.out.changes[i].action, NOTIFY_ACTION_ADDED); } CHECK_WSTR(notify.nttrans.out.changes[0].name, "test0.txt", STR_UNICODE); - /* and now from the 1st notify */ + printf("and now from the 1st notify\n"); status = smb_raw_changenotify_recv(req2, mem_ctx, ¬ify); CHECK_STATUS(status, NT_STATUS_OK); CHECK_VAL(notify.nttrans.out.num_changes, 1); CHECK_VAL(notify.nttrans.out.changes[0].action, NOTIFY_ACTION_REMOVED); CHECK_WSTR(notify.nttrans.out.changes[0].name, "test0.txt", STR_UNICODE); - /* (3rd notify) this notify will only see the 1st unlink */ + printf("(3rd notify) this notify will only see the 1st unlink\n"); req = smb_raw_changenotify_send(cli->tree, ¬ify); + status = smbcli_unlink(cli->tree, BASEDIR "\\nonexistant.txt"); + CHECK_STATUS(status, NT_STATUS_OBJECT_NAME_NOT_FOUND); + printf("testing notify on wildcard unlink for %d files\n", count-1); /* (2nd unlink) do a wildcard unlink */ - status = smbcli_unlink(cli->tree, BASEDIR "\\test*.txt"); + status = smbcli_unlink(cli2->tree, BASEDIR "\\test*.txt"); CHECK_STATUS(status, NT_STATUS_OK); /* receive the 3rd notify */ @@ -1149,13 +1156,16 @@ */ BOOL torture_raw_notify(struct torture_context *torture) { - struct smbcli_state *cli; + struct smbcli_state *cli, *cli2; BOOL ret = True; TALLOC_CTX *mem_ctx; if (!torture_open_connection(&cli, 0)) { return False; } + if (!torture_open_connection(&cli2, 0)) { + return False; + } mem_ctx = talloc_init("torture_raw_notify"); @@ -1163,7 +1173,7 @@ return False; } - ret &= test_notify_dir(cli, mem_ctx); + ret &= test_notify_dir(cli, cli2, mem_ctx); ret &= test_notify_mask(cli, mem_ctx); ret &= test_notify_recursive(cli, mem_ctx); ret &= test_notify_file(cli, mem_ctx); @@ -1177,6 +1187,7 @@ smb_raw_exit(cli->session); smbcli_deltree(cli->tree, BASEDIR); torture_close_connection(cli); + torture_close_connection(cli2); talloc_free(mem_ctx); return ret; }