The branch, master has been updated via 7c0a1c1e13f s3:winbind: Set/unset the winbind_call_flow callback if log level changes via a1b2f17c6db s3:winbind: Update winbind to tevent 0.15.0 API via 5b130e620fa s3:winbind: Add callback winbind_call_flow() via 24120728bb2 ldb: call tevent_set_max_debug_level(TEVENT_DEBUG_TRACE) together with ldb_tevent_debug() via 0031a102c3d lib/util: call tevent_set_max_debug_level() in samba_tevent_set_debug() via 6a80d170bca tevent: version 0.15.0 via 0ddf8b5645e tevent: add tevent_common_fd_str() helper via 2645be60d7a tevent: avoid calling epoll_update_event() again if epoll_check_reopen() already did it via e9d98097346 tevent: let epoll_check_reopen() clear all events before reopening them via 3217d5dc1d6 tevent: avoid epoll_check_reopen() overhead unless required via d94b9c81242 tevent: make use of TEVENT_DEBUG() when using TEVENT_DEBUG_TRACE via 812313f1c82 tevent: add TEVENT_DEBUG() avoid argument overhead when log is not active... via 2c78a4f527e tevent: introduce tevent_set_max_debug_level() (default TEVENT_DEBUG_WARNING) via 86140d7c381 tevent: add fd_speed test via d7b29125c01 tevent: Flow: add tevent_thread_call_depth_set_callback() via 0c4d6e630f5 tevent: Flow: store cleanup function name in tevent_req via 85e43e70b20 tevent: Flow: store cancel function name in tevent_req via 5e83691d1ed tevent: Flow: store trigger function name in tevent_queue_entry via deec9994eb8 tevent: Flow: store callback function name in tevent_req via fb3a9cd7329 tevent: Flow: pass function name to tevent_req_create() via 1c9e9f46046 tevent: Deprecate some tevent_thread_call_depth_*() functions via e9f38f6e6d8 tevent: Move definition of _DEPRECATED_ to the top of tevent.h via 28ddcaf4d8e s3:winbindd: set TEVENT_DEPRECATED as tevent_thread_call_depth_*() api will change soon via c1124ec8e5d tevent: add tevent_dlinklist.h as copy from lib/util/dlinklist.h via e3c77030fee lib/util: dlinklist.h sync with LGPL copy from lib/ldb/include/dlinklist.h via 8edb16a3964 ldb: clarify LGPL scope of include/dlinklist.h via 18e18006ad0 ldb: remove trailing whitespaces from include/dlinklist.h via a665d44f22c tevent: rely on epoll_create1() for epoll interface via 0daa9ebc235 lib:replace: rely on epoll_create1() for epoll interface via b649c7d3c2b tdb: release 1.4.9 via 791e2817e13 talloc: release 2.4.1 from bb6fecd9ac5 netcmd: sites: add sites and subnet list and view commands to manpage
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 7c0a1c1e13fdd2209d02098e75102f46b7588fd4 Author: Pavel Filipenský <pfilipen...@samba.org> Date: Wed May 3 11:21:11 2023 +0200 s3:winbind: Set/unset the winbind_call_flow callback if log level changes Done only for the parent process. Works with 'smbcontrol reload-config' Signed-off-by: Pavel Filipenský <pfilipen...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> Autobuild-User(master): Andreas Schneider <a...@cryptomilk.org> Autobuild-Date(master): Wed Jul 19 09:00:50 UTC 2023 on atb-devel-224 commit a1b2f17c6db3286cf991ac2ff9f62632ae0660ac Author: Pavel Filipenský <pfilipen...@samba.org> Date: Tue May 2 21:59:53 2023 +0200 s3:winbind: Update winbind to tevent 0.15.0 API Signed-off-by: Pavel Filipenský <pfilipen...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit 5b130e620faf0129ae4dbc456788aea693efa11e Author: Pavel Filipenský <pfilipen...@samba.org> Date: Wed May 3 11:19:45 2023 +0200 s3:winbind: Add callback winbind_call_flow() Signed-off-by: Pavel Filipenský <pfilipen...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit 24120728bb26ae814292e2e8c06eaa4707bb18b6 Author: Stefan Metzmacher <me...@samba.org> Date: Tue Jan 31 16:25:40 2023 +0100 ldb: call tevent_set_max_debug_level(TEVENT_DEBUG_TRACE) together with ldb_tevent_debug() This means ldb_tevent_debug() is only called for TEVENT_DEBUG_TRACE. Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 0031a102c3d7b21a4fe51198db9362251970a83d Author: Stefan Metzmacher <me...@samba.org> Date: Tue Jan 31 16:25:40 2023 +0100 lib/util: call tevent_set_max_debug_level() in samba_tevent_set_debug() This means samba_tevent_debug() is only called when needed. Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 6a80d170bca0c938f78ab12e37481b52792a9d83 Author: Stefan Metzmacher <me...@samba.org> Date: Wed Jan 18 15:41:37 2023 +0100 tevent: version 0.15.0 - remove py2 ifdefs - python: Safely clear structure members - the tevent_thread_call_depth API is updated in order to allow better tracing. - add tevent_set_max_debug_level() only and don't pass TEVENT_DEBUG_TRACE to tevent_debug() callbacks by default. - Spelling fixes - Make use of epoll_create1() for epoll backend - Optimize overhead in the epoll backend Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 0ddf8b5645e4f944aa9db209ed0813e94623736a Author: Stefan Metzmacher <me...@samba.org> Date: Fri Nov 11 22:25:34 2022 +0100 tevent: add tevent_common_fd_str() helper Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 2645be60d7a0d57d9e688b3a04fae3bb1f3f14d7 Author: Stefan Metzmacher <me...@samba.org> Date: Wed Jan 11 08:21:47 2023 +0100 tevent: avoid calling epoll_update_event() again if epoll_check_reopen() already did it Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit e9d980973468a6d03cbe31e603440c475a22e3d7 Author: Stefan Metzmacher <me...@samba.org> Date: Wed Jan 11 08:21:47 2023 +0100 tevent: let epoll_check_reopen() clear all events before reopening them This is clearer for multiplexed fdes as it means both sides are already cleared before we call epoll_update_event() again. Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 3217d5dc1d631d19392576436eb006e52c816a1f Author: Stefan Metzmacher <me...@samba.org> Date: Thu Apr 20 12:59:33 2023 +0000 tevent: avoid epoll_check_reopen() overhead unless required The preparation, function call and cleanup for epoll_check_reopen() is quite some overhead and not needed most of the time! So check the pid in the caller avoids most of it. Review with: git show -w Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit d94b9c8124225afd37deae32bf403c19ade1d109 Author: Stefan Metzmacher <me...@samba.org> Date: Fri Nov 11 22:25:34 2022 +0100 tevent: make use of TEVENT_DEBUG() when using TEVENT_DEBUG_TRACE Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 812313f1c82d3679bf5f5e22bb2b0268e9bbb152 Author: Stefan Metzmacher <me...@samba.org> Date: Fri Nov 11 15:05:53 2022 +0100 tevent: add TEVENT_DEBUG() avoid argument overhead when log is not active... It can be very costly to calculate the arguments passed to tevent_debug(), just to drop the message within tevent_debug() or the callback function. So we add a way to avoid the overhead, it will be used in the next commits. Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 2c78a4f527eecba89973bfdb5a6d354d31e847d5 Author: Stefan Metzmacher <me...@samba.org> Date: Fri Nov 11 15:05:53 2022 +0100 tevent: introduce tevent_set_max_debug_level() (default TEVENT_DEBUG_WARNING) Allow an application to decide which log levels it wants to get in the callback function passed to tevent_set_debug(). By default TEVENT_DEBUG_WARNING is the maximal reported level and TEVENT_DEBUG_TRACE message no longer reach the callback function by default. It seems Samba is the only consumer of tevent_set_debug(), so it should not be a huge problem, as Samba only reports TEVENT_DEBUG_TRACE message with log level 50 anyway. And future Samba versions will call tevent_set_max_debug_level() if needed. Note the change to tevent-0.14.1.sigs will be reverted with the release of tevent 0.15.0. Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 86140d7c38166bcf2f4becc618e3c993081e3ba1 Author: Stefan Metzmacher <me...@samba.org> Date: Fri Jan 27 12:12:45 2023 +0100 tevent: add fd_speed test This is similar to the "context" test, but without signal handlers. It also creates a constant load instead of being time limited, which makes it useful to analyse using callgrind and other tools. Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit d7b29125c01dd2a152d83ab0dd9418bbc989fa87 Author: Pavel Filipenský <pfilipen...@samba.org> Date: Tue May 2 21:57:16 2023 +0200 tevent: Flow: add tevent_thread_call_depth_set_callback() Note the tevent-0.14.1.sigs changes will be reverted in the 'tevent 0.15.0' commit. Signed-off-by: Pavel Filipenský <pfilipen...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit 0c4d6e630f5dac681e49f776ca99e3eff13be6b7 Author: Stefan Metzmacher <me...@samba.org> Date: Tue May 23 06:39:06 2023 +0200 tevent: Flow: store cleanup function name in tevent_req Note the tevent-0.14.1.sigs changes will be reverted in the 'tevent 0.15.0' commit. Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: Pavel Filipenský <pfilipen...@samba.org> commit 85e43e70b200d25e0b4afc0f9611ddae014af5cc Author: Stefan Metzmacher <me...@samba.org> Date: Tue May 23 06:38:27 2023 +0200 tevent: Flow: store cancel function name in tevent_req Note the tevent-0.14.1.sigs changes will be reverted in the 'tevent 0.15.0' commit. Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: Pavel Filipenský <pfilipen...@samba.org> commit 5e83691d1edb97805c1a270f4807aa0a8700d166 Author: Pavel Filipenský <pfilipen...@samba.org> Date: Mon May 15 12:57:09 2023 +0200 tevent: Flow: store trigger function name in tevent_queue_entry Note the tevent-0.14.1.sigs changes will be reverted in the 'tevent 0.15.0' commit. Signed-off-by: Pavel Filipenský <pfilipen...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit deec9994eb873ad42932645361dd3eedcc351a09 Author: Pavel Filipenský <pfilipen...@samba.org> Date: Mon Apr 24 15:04:06 2023 +0200 tevent: Flow: store callback function name in tevent_req Note the tevent-0.14.1.sigs changes will be reverted in the 'tevent 0.15.0' commit. Signed-off-by: Pavel Filipenský <pfilipen...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit fb3a9cd7329a3b1952846ef5433f59b66b017b2d Author: Pavel Filipenský <pfili...@redhat.com> Date: Sat Jun 18 10:57:11 2022 +0200 tevent: Flow: pass function name to tevent_req_create() Note the tevent-0.14.1.sigs changes will be reverted in the 'tevent 0.15.0' commit. Signed-off-by: Pavel Filipenský <pfilipen...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit 1c9e9f46046069a98fd58e4d3af6868b0cc45308 Author: Pavel Filipenský <pfilipen...@samba.org> Date: Fri Apr 28 20:45:20 2023 +0200 tevent: Deprecate some tevent_thread_call_depth_*() functions Signed-off-by: Pavel Filipenský <pfilipen...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit e9f38f6e6d858d3efe8610a29723f50b0c72a173 Author: Pavel Filipenský <pfilipen...@samba.org> Date: Fri Apr 28 20:13:29 2023 +0200 tevent: Move definition of _DEPRECATED_ to the top of tevent.h Signed-off-by: Pavel Filipenský <pfilipen...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit 28ddcaf4d8ebb7a4e3498518580ff71662d3cee0 Author: Stefan Metzmacher <me...@samba.org> Date: Fri May 19 11:16:49 2023 +0200 s3:winbindd: set TEVENT_DEPRECATED as tevent_thread_call_depth_*() api will change soon Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: Pavel Filipenský <pfilipen...@samba.org> commit c1124ec8e5d2fb38b9011b72118bb981904a011d Author: Stefan Metzmacher <me...@samba.org> Date: Mon Apr 24 12:39:17 2023 +0200 tevent: add tevent_dlinklist.h as copy from lib/util/dlinklist.h Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit e3c77030fee120b9b73d971d39eca142920f6b49 Author: Stefan Metzmacher <me...@samba.org> Date: Thu Apr 20 14:35:25 2023 +0000 lib/util: dlinklist.h sync with LGPL copy from lib/ldb/include/dlinklist.h Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 8edb16a3964e3a699897e2b4c84c5fad1f58b015 Author: Stefan Metzmacher <me...@samba.org> Date: Mon Jan 30 16:10:07 2023 +0100 ldb: clarify LGPL scope of include/dlinklist.h Removing the explicit notice about ldb in order to have the same content in all copies of dlinklist.h in the next commits. Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 18e18006ad03e6dc1212b167e948836721b435c3 Author: Stefan Metzmacher <me...@samba.org> Date: Mon Jan 30 16:10:07 2023 +0100 ldb: remove trailing whitespaces from include/dlinklist.h Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit a665d44f22c1fea4fd9104e4e3e45ee9b6cd68cd Author: Dmitry Antipov <danti...@cloudlinux.com> Date: Fri Apr 7 14:47:15 2023 +0300 tevent: rely on epoll_create1() for epoll interface Prefer epoll_create1(2) over epoll_create(2) and always require the former to use epoll(7) interface, thus saving extra fcntl(2) call to set FD_CLOEXEC. Signed-off-by: Dmitry Antipov <danti...@cloudlinux.com> Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit 0daa9ebc2354d65a9d77a6a7d1616ef357056fd2 Author: Dmitry Antipov <danti...@cloudlinux.com> Date: Fri Apr 7 14:42:10 2023 +0300 lib:replace: rely on epoll_create1() for epoll interface Prefer epoll_create1(2) over epoll_create(2) and always require the former to use epoll(7) interface. Signed-off-by: Dmitry Antipov <danti...@cloudlinux.com> Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit b649c7d3c2b1e13e900c80ff7a20959a70b1c528 Author: Stefan Metzmacher <me...@samba.org> Date: Tue Jul 18 11:39:38 2023 +0200 tdb: release 1.4.9 * Remove remaining, but broken python2 support * Spelling fixes * python: Safely clear structure members Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit 791e2817e13182344447590313f7e372a27c1d48 Author: Stefan Metzmacher <me...@samba.org> Date: Tue Jul 18 11:39:38 2023 +0200 talloc: release 2.4.1 * Remove remaining, but broken python2 support * Spelling fixes * Remove unneeded va_copy() Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> ----------------------------------------------------------------------- Summary of changes: lib/ldb/common/ldb.c | 2 + lib/ldb/include/dlinklist.h | 9 +- lib/replace/wscript | 4 +- ...oc-util-2.3.0.sigs => pytalloc-util-2.4.1.sigs} | 0 .../ABI/{talloc-2.3.5.sigs => talloc-2.4.1.sigs} | 0 lib/talloc/wscript | 2 +- lib/tdb/ABI/{tdb-1.3.17.sigs => tdb-1.4.9.sigs} | 0 lib/tdb/wscript | 2 +- .../ABI/{tevent-0.14.0.sigs => tevent-0.15.0.sigs} | 10 ++ lib/tevent/testsuite.c | 114 +++++++++++++ lib/tevent/tevent.c | 5 +- lib/tevent/tevent.h | 177 ++++++++++++++++---- lib/tevent/tevent_debug.c | 73 ++++++-- .../dlinklist.h => tevent/tevent_dlinklist.h} | 9 +- lib/tevent/tevent_epoll.c | 96 ++++++----- lib/tevent/tevent_fd.c | 16 ++ lib/tevent/tevent_immediate.c | 6 +- lib/tevent/tevent_internal.h | 42 ++++- lib/tevent/tevent_queue.c | 68 +++++++- lib/tevent/tevent_req.c | 86 ++++++++-- lib/tevent/tevent_threads.c | 2 +- lib/tevent/tevent_timed.c | 8 +- lib/tevent/tevent_util.h | 185 ++------------------- lib/tevent/tevent_wrapper.c | 2 +- lib/tevent/wscript | 6 +- lib/util/dlinklist.h | 29 ++-- lib/util/tevent_debug.c | 11 ++ source3/winbindd/winbindd.c | 7 +- source3/winbindd/winbindd_dual.c | 10 +- source3/winbindd/winbindd_misc.c | 36 ++++ source3/winbindd/winbindd_proto.h | 6 + 31 files changed, 701 insertions(+), 322 deletions(-) copy lib/talloc/ABI/{pytalloc-util-2.3.0.sigs => pytalloc-util-2.4.1.sigs} (100%) copy lib/talloc/ABI/{talloc-2.3.5.sigs => talloc-2.4.1.sigs} (100%) copy lib/tdb/ABI/{tdb-1.3.17.sigs => tdb-1.4.9.sigs} (100%) copy lib/tevent/ABI/{tevent-0.14.0.sigs => tevent-0.15.0.sigs} (91%) copy lib/{ldb/include/dlinklist.h => tevent/tevent_dlinklist.h} (96%) Changeset truncated at 500 lines: diff --git a/lib/ldb/common/ldb.c b/lib/ldb/common/ldb.c index 6145bc7e500..fe7c4d18f5c 100644 --- a/lib/ldb/common/ldb.c +++ b/lib/ldb/common/ldb.c @@ -117,6 +117,7 @@ struct ldb_context *ldb_init(TALLOC_CTX *mem_ctx, struct tevent_context *ev_ctx) return NULL; } tevent_set_debug(ev_ctx, ldb_tevent_debug, ldb); + tevent_set_max_debug_level(ev_ctx, TEVENT_DEBUG_TRACE); tevent_loop_allow_nesting(ev_ctx); } @@ -745,6 +746,7 @@ struct ldb_handle *ldb_handle_new(TALLOC_CTX *mem_ctx, struct ldb_context *ldb) return NULL; } tevent_set_debug(h->event_context, ldb_tevent_debug, ldb); + tevent_set_max_debug_level(h->event_context, TEVENT_DEBUG_TRACE); tevent_loop_allow_nesting(h->event_context); } diff --git a/lib/ldb/include/dlinklist.h b/lib/ldb/include/dlinklist.h index 822a8266e04..a775e8dcdc1 100644 --- a/lib/ldb/include/dlinklist.h +++ b/lib/ldb/include/dlinklist.h @@ -1,13 +1,12 @@ -/* +/* Unix SMB/CIFS implementation. some simple double linked list macros Copyright (C) Andrew Tridgell 1998-2010 - ** NOTE! The following LGPL license applies to the ldb - ** library. This does NOT imply that all of Samba is released - ** under the LGPL - + ** NOTE! The following LGPL license applies to this file (*dlinklist.h). + ** This does NOT imply that all of Samba is released under the LGPL + This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either diff --git a/lib/replace/wscript b/lib/replace/wscript index 199e636aa02..37d77593900 100644 --- a/lib/replace/wscript +++ b/lib/replace/wscript @@ -487,7 +487,7 @@ def configure(conf): conf.CHECK_FUNCS('gai_strerror get_current_dir_name') conf.CHECK_FUNCS('timegm getifaddrs freeifaddrs mmap setgroups syscall setsid') conf.CHECK_FUNCS('getgrent_r getgrgid_r getgrnam_r getgrouplist getpagesize') - conf.CHECK_FUNCS('getpwent_r getpwnam_r getpwuid_r epoll_create') + conf.CHECK_FUNCS('getpwent_r getpwnam_r getpwuid_r epoll_create1') conf.CHECK_FUNCS('getprogname') if not conf.CHECK_FUNCS('copy_file_range'): conf.CHECK_CODE(''' @@ -710,7 +710,7 @@ syscall(SYS_copy_file_range,0,NULL,0,NULL,0,0); conf.CHECK_DECLS('getgrent_r getpwent_r', reverse=True, headers='pwd.h grp.h') conf.CHECK_DECLS('pread pwrite setenv setresgid setresuid', reverse=True) - if conf.CONFIG_SET('HAVE_EPOLL_CREATE') and conf.CONFIG_SET('HAVE_SYS_EPOLL_H'): + if conf.CONFIG_SET('HAVE_EPOLL_CREATE1') and conf.CONFIG_SET('HAVE_SYS_EPOLL_H'): conf.DEFINE('HAVE_EPOLL', 1) if conf.CHECK_FUNCS('eventfd', headers='sys/eventfd.h'): diff --git a/lib/talloc/ABI/pytalloc-util-2.3.0.sigs b/lib/talloc/ABI/pytalloc-util-2.4.1.sigs similarity index 100% copy from lib/talloc/ABI/pytalloc-util-2.3.0.sigs copy to lib/talloc/ABI/pytalloc-util-2.4.1.sigs diff --git a/lib/talloc/ABI/talloc-2.3.5.sigs b/lib/talloc/ABI/talloc-2.4.1.sigs similarity index 100% copy from lib/talloc/ABI/talloc-2.3.5.sigs copy to lib/talloc/ABI/talloc-2.4.1.sigs diff --git a/lib/talloc/wscript b/lib/talloc/wscript index 503295eeceb..075f1ec4417 100644 --- a/lib/talloc/wscript +++ b/lib/talloc/wscript @@ -1,7 +1,7 @@ #!/usr/bin/env python APPNAME = 'talloc' -VERSION = '2.4.0' +VERSION = '2.4.1' import os import sys diff --git a/lib/tdb/ABI/tdb-1.3.17.sigs b/lib/tdb/ABI/tdb-1.4.9.sigs similarity index 100% copy from lib/tdb/ABI/tdb-1.3.17.sigs copy to lib/tdb/ABI/tdb-1.4.9.sigs diff --git a/lib/tdb/wscript b/lib/tdb/wscript index 9c9bf77f115..5e6a928d5bc 100644 --- a/lib/tdb/wscript +++ b/lib/tdb/wscript @@ -1,7 +1,7 @@ #!/usr/bin/env python APPNAME = 'tdb' -VERSION = '1.4.8' +VERSION = '1.4.9' import sys, os diff --git a/lib/tevent/ABI/tevent-0.14.0.sigs b/lib/tevent/ABI/tevent-0.15.0.sigs similarity index 91% copy from lib/tevent/ABI/tevent-0.14.0.sigs copy to lib/tevent/ABI/tevent-0.15.0.sigs index f2a11902a80..f7eba5775df 100644 --- a/lib/tevent/ABI/tevent-0.14.0.sigs +++ b/lib/tevent/ABI/tevent-0.15.0.sigs @@ -1,3 +1,4 @@ +__tevent_req_create: struct tevent_req *(TALLOC_CTX *, void *, size_t, const char *, const char *, const char *) _tevent_add_fd: struct tevent_fd *(struct tevent_context *, TALLOC_CTX *, int, uint16_t, tevent_fd_handler_t, void *, const char *, const char *) _tevent_add_signal: struct tevent_signal *(struct tevent_context *, TALLOC_CTX *, int, int, tevent_signal_handler_t, void *, const char *, const char *) _tevent_add_timer: struct tevent_timer *(struct tevent_context *, TALLOC_CTX *, struct timeval, tevent_timer_handler_t, void *, const char *, const char *) @@ -8,6 +9,9 @@ _tevent_create_immediate: struct tevent_immediate *(TALLOC_CTX *, const char *) _tevent_loop_once: int (struct tevent_context *, const char *) _tevent_loop_until: int (struct tevent_context *, bool (*)(void *), void *, const char *) _tevent_loop_wait: int (struct tevent_context *, const char *) +_tevent_queue_add: bool (struct tevent_queue *, struct tevent_context *, struct tevent_req *, tevent_queue_trigger_fn_t, const char *, void *) +_tevent_queue_add_entry: struct tevent_queue_entry *(struct tevent_queue *, struct tevent_context *, struct tevent_req *, tevent_queue_trigger_fn_t, const char *, void *) +_tevent_queue_add_optimize_empty: struct tevent_queue_entry *(struct tevent_queue *, struct tevent_context *, struct tevent_req *, tevent_queue_trigger_fn_t, const char *, void *) _tevent_queue_create: struct tevent_queue *(TALLOC_CTX *, const char *, const char *) _tevent_req_callback_data: void *(struct tevent_req *) _tevent_req_cancel: bool (struct tevent_req *, const char *) @@ -18,7 +22,11 @@ _tevent_req_error: bool (struct tevent_req *, uint64_t, const char *) _tevent_req_nomem: bool (const void *, struct tevent_req *, const char *) _tevent_req_notify_callback: void (struct tevent_req *, const char *) _tevent_req_oom: void (struct tevent_req *, const char *) +_tevent_req_set_callback: void (struct tevent_req *, tevent_req_fn, const char *, void *) +_tevent_req_set_cancel_fn: void (struct tevent_req *, tevent_req_cancel_fn, const char *) +_tevent_req_set_cleanup_fn: void (struct tevent_req *, tevent_req_cleanup_fn, const char *) _tevent_schedule_immediate: void (struct tevent_immediate *, struct tevent_context *, tevent_immediate_handler_t, void *, const char *, const char *) +_tevent_thread_call_depth_reset_from_req: void (struct tevent_req *, const char *) _tevent_threaded_schedule_immediate: void (struct tevent_threaded_context *, struct tevent_immediate *, tevent_immediate_handler_t, void *, const char *, const char *) tevent_abort: void (struct tevent_context *, const char *) tevent_backend_list: const char **(TALLOC_CTX *) @@ -120,6 +128,7 @@ tevent_set_abort_fn: void (void (*)(const char *)) tevent_set_debug: int (struct tevent_context *, void (*)(void *, enum tevent_debug_level, const char *, va_list), void *) tevent_set_debug_stderr: int (struct tevent_context *) tevent_set_default_backend: void (const char *) +tevent_set_max_debug_level: enum tevent_debug_level (struct tevent_context *, enum tevent_debug_level) tevent_set_trace_callback: void (struct tevent_context *, tevent_trace_callback_t, void *) tevent_set_trace_fd_callback: void (struct tevent_context *, tevent_trace_fd_callback_t, void *) tevent_set_trace_immediate_callback: void (struct tevent_context *, tevent_trace_immediate_callback_t, void *) @@ -132,6 +141,7 @@ tevent_signal_support: bool (struct tevent_context *) tevent_thread_call_depth_activate: void (size_t *) tevent_thread_call_depth_deactivate: void (void) tevent_thread_call_depth_reset_from_req: void (struct tevent_req *) +tevent_thread_call_depth_set_callback: void (tevent_call_depth_callback_t, void *) tevent_thread_call_depth_start: void (struct tevent_req *) tevent_thread_proxy_create: struct tevent_thread_proxy *(struct tevent_context *) tevent_thread_proxy_schedule: void (struct tevent_thread_proxy *, struct tevent_immediate **, tevent_immediate_handler_t, void *) diff --git a/lib/tevent/testsuite.c b/lib/tevent/testsuite.c index e7583e64059..c5f7ef32146 100644 --- a/lib/tevent/testsuite.c +++ b/lib/tevent/testsuite.c @@ -261,6 +261,112 @@ static bool test_event_context(struct torture_context *test, return true; } +static void fde_handler_do_read(struct tevent_context *ev_ctx, struct tevent_fd *f, + uint16_t flags, void *private_data) +{ + int *fd = (int *)private_data; + char c = 0; + + do_read(fd[0], &c, 1); + fde_count++; +} + +static void fde_handler_do_write(struct tevent_context *ev_ctx, struct tevent_fd *f, + uint16_t flags, void *private_data) +{ + int *fd = (int *)private_data; + char c = 0; + + do_write(fd[1], &c, 1); +} + +static void fde_handler_ignore(struct tevent_context *ev_ctx, struct tevent_fd *f, + uint16_t flags, void *private_data) +{ +} + +static bool test_fd_speedX(struct torture_context *test, + const void *test_data, + size_t additional_fdes) +{ + struct tevent_context *ev_ctx = NULL; + int fd[2] = { -1, -1 }; + const char *backend = (const char *)test_data; + struct tevent_fd *fde_read = NULL; + struct tevent_fd *fde_write = NULL; + int finished=0; + struct timeval t; + size_t i; + int ret; + + ev_ctx = test_tevent_context_init_byname(test, backend); + if (ev_ctx == NULL) { + torture_comment(test, "event backend '%s' not supported\n", backend); + return true; + } + + torture_comment(test, "backend '%s' - test_fd_speed%zu\n", + backend, 1 + additional_fdes); + + /* reset globals */ + fde_count = 0; + + /* create a pipe */ + ret = pipe(fd); + torture_assert_int_equal(test, ret, 0, "pipe failed"); + + fde_read = tevent_add_fd(ev_ctx, ev_ctx, fd[0], TEVENT_FD_READ, + fde_handler_do_read, fd); + + fde_write = tevent_add_fd(ev_ctx, ev_ctx, fd[1], TEVENT_FD_WRITE, + fde_handler_do_write, fd); + + for (i = 0; i < additional_fdes; i++) { + tevent_add_fd(ev_ctx, ev_ctx, fd[0], TEVENT_FD_WRITE, + fde_handler_ignore, fd); + tevent_add_fd(ev_ctx, ev_ctx, fd[1], TEVENT_FD_READ, + fde_handler_ignore, fd); + } + + tevent_fd_set_auto_close(fde_read); + tevent_fd_set_auto_close(fde_write); + + tevent_add_timer(ev_ctx, ev_ctx, timeval_current_ofs(600,0), + finished_handler, &finished); + + t = timeval_current(); + while (!finished && fde_count < 1000000) { + errno = 0; + if (tevent_loop_once(ev_ctx) == -1) { + TALLOC_FREE(ev_ctx); + torture_fail(test, talloc_asprintf(test, "Failed event loop %s\n", strerror(errno))); + return false; + } + } + + talloc_free(fde_read); + talloc_free(fde_write); + + torture_comment(test, "Got %.2f pipe events\n", (double)fde_count); + torture_comment(test, "Got %.2f pipe events/sec\n", fde_count/timeval_elapsed(&t)); + + talloc_free(ev_ctx); + + return true; +} + +static bool test_fd_speed1(struct torture_context *test, + const void *test_data) +{ + return test_fd_speedX(test, test_data, 0); +} + +static bool test_fd_speed2(struct torture_context *test, + const void *test_data) +{ + return test_fd_speedX(test, test_data, 1); +} + struct test_event_fd1_state { struct torture_context *tctx; const char *backend; @@ -1865,6 +1971,14 @@ struct torture_suite *torture_local_event(TALLOC_CTX *mem_ctx) "context", test_event_context, (const void *)list[i]); + torture_suite_add_simple_tcase_const(backend_suite, + "fd_speed1", + test_fd_speed1, + (const void *)list[i]); + torture_suite_add_simple_tcase_const(backend_suite, + "fd_speed2", + test_fd_speed2, + (const void *)list[i]); torture_suite_add_simple_tcase_const(backend_suite, "fd1", test_event_fd1, diff --git a/lib/tevent/tevent.c b/lib/tevent/tevent.c index 4142da78f60..63ef4dbd7ba 100644 --- a/lib/tevent/tevent.c +++ b/lib/tevent/tevent.c @@ -824,7 +824,10 @@ int _tevent_loop_once(struct tevent_context *ev, const char *location) tevent_trace_point_callback(ev, TEVENT_TRACE_AFTER_LOOP_ONCE); /* New event (and request) will always start with call depth 0. */ - tevent_thread_call_depth_set(0); + tevent_thread_call_depth_notify(TEVENT_CALL_FLOW_REQ_RESET, + NULL, + 0, + __func__); if (ev->nesting.level > 0) { if (ev->nesting.hook_fn) { diff --git a/lib/tevent/tevent.h b/lib/tevent/tevent.h index ba564bc0195..fec8c2a1744 100644 --- a/lib/tevent/tevent.h +++ b/lib/tevent/tevent.h @@ -39,6 +39,15 @@ #define __has_attribute(x) 0 #endif +#ifdef TEVENT_DEPRECATED +#ifndef _DEPRECATED_ +#if __has_attribute(deprecated) || (__GNUC__ >= 3) +#define _DEPRECATED_ __attribute__ ((deprecated)) +#else +#define _DEPRECATED_ +#endif +#endif +#endif struct tevent_context; struct tevent_ops; @@ -615,6 +624,18 @@ typedef void (*tevent_debug_fn)(void *context, /** * Set destination for tevent debug messages * + * As of version 0.15.0 the invocation of + * the debug function for indiviual messages + * is limited by the current max_debug_level, + * which means TEVENT_DEBUG_TRACE messages + * are not passed by default: + * + * - tevent_set_debug() with debug == NULL implies + * tevent_set_max_debug_level(ev, TEVENT_DEBUG_FATAL). + * + * - tevent_set_debug() with debug != NULL implies + * tevent_set_max_debug_level(ev, TEVENT_DEBUG_WARNING). + * * @param[in] ev Event context to debug * @param[in] debug Function to handle output printing * @param[in] context The context to pass to the debug function. @@ -622,11 +643,29 @@ typedef void (*tevent_debug_fn)(void *context, * @return Always returns 0 as of version 0.9.8 * * @note Default is to emit no debug messages + * + * @see tevent_set_max_debug_level() */ int tevent_set_debug(struct tevent_context *ev, tevent_debug_fn debug, void *context); +/** + * Set maximum debug level for tevent debug messages + * + * @param[in] ev Event context to debug + * @param[in] max_level Function to handle output printing + * + * @return The former max level is returned. + * + * @see tevent_set_debug() + * + * @note Available as of tevent 0.15.0 + */ +enum tevent_debug_level +tevent_set_max_debug_level(struct tevent_context *ev, + enum tevent_debug_level max_level); + /** * Designate stderr for debug message output * @@ -1010,6 +1049,13 @@ typedef void (*tevent_req_fn)(struct tevent_req *subreq); * callback. */ void tevent_req_set_callback(struct tevent_req *req, tevent_req_fn fn, void *pvt); +void _tevent_req_set_callback(struct tevent_req *req, + tevent_req_fn fn, + const char *fn_name, + void *pvt); + +#define tevent_req_set_callback(req, fn, pvt) \ + _tevent_req_set_callback(req, fn, #fn, pvt) #ifdef DOXYGEN /** @@ -1166,6 +1212,11 @@ typedef bool (*tevent_req_cancel_fn)(struct tevent_req *req); * @param[in] fn A pointer to the cancel function. */ void tevent_req_set_cancel_fn(struct tevent_req *req, tevent_req_cancel_fn fn); +void _tevent_req_set_cancel_fn(struct tevent_req *req, + tevent_req_cancel_fn fn, + const char *fn_name); +#define tevent_req_set_cancel_fn(req, fn) \ + _tevent_req_set_cancel_fn(req, fn, #fn) #ifdef DOXYGEN /** @@ -1227,6 +1278,11 @@ typedef void (*tevent_req_cleanup_fn)(struct tevent_req *req, * @param[in] fn A pointer to the cancel function. */ void tevent_req_set_cleanup_fn(struct tevent_req *req, tevent_req_cleanup_fn fn); +void _tevent_req_set_cleanup_fn(struct tevent_req *req, + tevent_req_cleanup_fn fn, + const char *fn_name); +#define tevent_req_set_cleanup_fn(req, fn) \ + _tevent_req_set_cleanup_fn(req, fn, #fn) #ifdef DOXYGEN /** @@ -1262,9 +1318,20 @@ struct tevent_req *_tevent_req_create(TALLOC_CTX *mem_ctx, const char *type, const char *location); +struct tevent_req *__tevent_req_create(TALLOC_CTX *mem_ctx, + void *pstate, + size_t state_size, + const char *type, + const char *func, + const char *location); + #define tevent_req_create(_mem_ctx, _pstate, _type) \ - _tevent_req_create((_mem_ctx), (_pstate), sizeof(_type), \ - #_type, __location__) + __tevent_req_create((_mem_ctx), \ + (_pstate), \ + sizeof(_type), \ + #_type, \ + __func__, \ + __location__) #endif /** @@ -2029,10 +2096,9 @@ pid_t tevent_cached_getpid(void); * * Part 1: activation/deactivation * - * tevent_thread_call_depth_activate(), tevent_thread_call_depth_deactivate() - * - * Activating registers external size_t variable that will be maintained with - * the current call depth. + * void tevent_thread_call_depth_set_callback(f, private_data) + * Register a callback that can track 'call depth' and 'request flow' + * NULL as a function callback means deactivation. * * Part 2: Mark the request (and its subrequests) to be tracked * @@ -2060,34 +2126,62 @@ pid_t tevent_cached_getpid(void); * @{ */ +enum tevent_thread_call_depth_cmd { + TEVENT_CALL_FLOW_REQ_RESET, + TEVENT_CALL_FLOW_REQ_CREATE, + TEVENT_CALL_FLOW_REQ_CANCEL, + TEVENT_CALL_FLOW_REQ_CLEANUP, + TEVENT_CALL_FLOW_REQ_NOTIFY_CB, + TEVENT_CALL_FLOW_REQ_QUEUE_ENTER, + TEVENT_CALL_FLOW_REQ_QUEUE_TRIGGER, + TEVENT_CALL_FLOW_REQ_QUEUE_LEAVE, +}; + +typedef void (*tevent_call_depth_callback_t)( + void *private_data, + enum tevent_thread_call_depth_cmd cmd, + struct tevent_req *req, + size_t depth, + const char *fname); + +struct tevent_thread_call_depth_state { + tevent_call_depth_callback_t cb; + void *cb_private; +}; + +extern __thread struct tevent_thread_call_depth_state + tevent_thread_call_depth_state_g; + /** - * Activate call depth tracking and register external variable that will - * be updated to the call depth of currently processed tevent request. + * Register callback function for request/subrequest call depth / flow tracking. * - * @param[in] ptr Address of external variable + * @param[in] f External call depth and flow handling function */ -void tevent_thread_call_depth_activate(size_t *ptr); +void tevent_thread_call_depth_set_callback(tevent_call_depth_callback_t f, + void *private_data); -/** - * Deactivate call depth tracking. Can be used in the child process, - * after fork. - */ -void tevent_thread_call_depth_deactivate(void); +#ifdef TEVENT_DEPRECATED -/** - * This request will have call depth set to 1, its subrequest will get 2 and so - * on. All other requests will have call depth 0. - */ -void tevent_thread_call_depth_start(struct tevent_req *req); +void tevent_thread_call_depth_activate(size_t *ptr) _DEPRECATED_; +void tevent_thread_call_depth_deactivate(void) _DEPRECATED_; -- Samba Shared Repository