[SCM] Samba Shared Repository - branch master updated
Stefan Metzmacher
metze at samba.org
Sat Dec 14 05:20:04 MST 2013
The branch, master has been updated
via f3556bd tdb: Avoid reallocs for lockrecs
via 2a77e61 smbd: Early exit
via 5baa740 smbd: Implement and use full_path_tos
via 7a06b16 smbd: Avoid pointless strcsequal calls
via 706c4de dbwrap: No lock_order check if not required
via 95bfc15 dbwrap_cache: Check negative first
via a31d08f dbwrap_cache: Fix dbwrap_cache_validate
via 7ae77a5 smbd: Simplify get_share_mode_lock a bit
via fd94f82 dbwrap: Avoid a stackframe in fetch_locked_internal
via 70dfb51 iconv: Use a static buffer in iconf not to spoil the talloc_pool
via a9753c1 smbd: Fix a false DEBUG fn name
via 92f9aac torture3: Do not depend on epoll
from eaf807c secacl: Slightly simplify make_sec_acl
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit f3556bd03bf9dfa16fb00d85da1a2c065cb0e522
Author: Volker Lendecke <vl at samba.org>
Date: Mon Dec 9 09:56:33 2013 +0000
tdb: Avoid reallocs for lockrecs
In normal operations we have at most 3 entries in this array. Don't
bother with shrinking.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
Autobuild-User(master): Stefan Metzmacher <metze at samba.org>
Autobuild-Date(master): Sat Dec 14 13:19:47 CET 2013 on sn-devel-104
commit 2a77e613cb0ca6402b5401ef9bde7a06a07ba91c
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 6 10:31:22 2013 +0000
smbd: Early exit
Yes, this also showed up in profiles
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 5baa7402ba8eebd9b2ddc6b259ae9bb2852b4bb1
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 6 14:34:05 2013 +0000
smbd: Implement and use full_path_tos
Yes, this looks like a hack, but talloc_asprintf does show up high in
profiles called from these routines
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 7a06b1661c1423780f05bc35ea435003712ca4b5
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 6 12:10:37 2013 +0000
smbd: Avoid pointless strcsequal calls
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 706c4deca142ce1363da54ab4806337726e6a50c
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 6 11:57:42 2013 +0000
dbwrap: No lock_order check if not required
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 95bfc1568648d03d5f03ab3f720a961dbc4d6cd5
Author: Volker Lendecke <vl at samba.org>
Date: Sat Dec 7 12:58:43 2013 +0000
dbwrap_cache: Check negative first
dbwrap_cache is right now used for notify most, and we hope to have very
few notifies around. So negative hits will be more likely than positive
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit a31d08feeb65bd3b4ff175c8096fb23f8d496789
Author: Volker Lendecke <vl at samba.org>
Date: Sat Dec 7 12:58:07 2013 +0000
dbwrap_cache: Fix dbwrap_cache_validate
Classic brown paper bag bug :-(
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 7ae77a5d265e5ac4d1006528a178c1d777599f39
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 6 07:40:03 2013 +0000
smbd: Simplify get_share_mode_lock a bit
This does two things: It gets rid of a talloc_stackframe in a hot
code path and to me it makes the code easier to understand. It makes
the talloc hierarchy more obvious to follow.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit fd94f8248198dc943f8b3107b944e971b5e742ce
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 6 11:38:12 2013 +0000
dbwrap: Avoid a stackframe in fetch_locked_internal
This shows in profiles. We call this so often that this is a pretty
hot code path.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 70dfb51430bc3b6e436fb5c5452d7ef8612ca02f
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 6 10:31:07 2013 +0000
iconv: Use a static buffer in iconf not to spoil the talloc_pool
This is a buffer that is strictly used like a stack variable. This
patch makes it one and while there it fixes an error path memleak.
In the "pull_failed" case we did not talloc_free(cvtbuf). With
talloc_tos(), this does not really matter, but for code without
this it does.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit a9753c180fbd06764987367fe3115159cdef4330
Author: Volker Lendecke <vl at samba.org>
Date: Sun Dec 8 16:41:04 2013 +0000
smbd: Fix a false DEBUG fn name
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 92f9aac82867fb35a3892f4f2b63a2c9d32711fc
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 13 14:55:45 2013 +0100
torture3: Do not depend on epoll
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
-----------------------------------------------------------------------
Summary of changes:
lib/dbwrap/dbwrap.c | 24 ++++-----------
lib/dbwrap/dbwrap_cache.c | 22 +++++++++++---
lib/tdb/common/lock.c | 32 +++++++++-----------
lib/tdb/common/open.c | 1 +
lib/tdb/common/tdb_private.h | 1 +
lib/util/charset/iconv.c | 16 +---------
source3/locking/brlock.c | 8 ++++-
source3/locking/share_mode_lock.c | 27 ++++++++---------
source3/smbd/files.c | 58 +++++++++++++++++++++++++++++++------
source3/smbd/notify.c | 14 +++++----
source3/smbd/proto.h | 3 ++
source3/smbd/trans2.c | 4 +-
source3/smbd/vfs.c | 2 +-
source3/torture/torture.c | 2 +-
14 files changed, 126 insertions(+), 88 deletions(-)
Changeset truncated at 500 lines:
diff --git a/lib/dbwrap/dbwrap.c b/lib/dbwrap/dbwrap.c
index 44e20bc..8270b63 100644
--- a/lib/dbwrap/dbwrap.c
+++ b/lib/dbwrap/dbwrap.c
@@ -167,15 +167,6 @@ static struct dbwrap_lock_order_state *dbwrap_check_lock_order(
static struct db_context *locked_dbs[DBWRAP_LOCK_ORDER_MAX];
struct dbwrap_lock_order_state *state = NULL;
- if (db->lock_order == 0) {
- /*
- * lock order 0 is for example for dbwrap_rbt without
- * real locking. Return state nevertheless to avoid
- * special cases.
- */
- return talloc_zero(mem_ctx, struct dbwrap_lock_order_state);
- }
-
if (db->lock_order > DBWRAP_LOCK_ORDER_MAX) {
DEBUG(0,("Invalid lock order %d of %s\n",
(int)db->lock_order, db->name));
@@ -219,22 +210,21 @@ static struct db_record *dbwrap_fetch_locked_internal(
TDB_DATA key))
{
struct db_record *rec;
- struct dbwrap_lock_order_state *lock_order;
- TALLOC_CTX *frame = talloc_stackframe();
+ struct dbwrap_lock_order_state *lock_order = NULL;
- lock_order = dbwrap_check_lock_order(db, frame);
- if (lock_order == NULL) {
- TALLOC_FREE(frame);
- return NULL;
+ if (db->lock_order != 0) {
+ lock_order = dbwrap_check_lock_order(db, mem_ctx);
+ if (lock_order == NULL) {
+ return NULL;
+ }
}
rec = db_fn(db, mem_ctx, key);
if (rec == NULL) {
- TALLOC_FREE(frame);
+ TALLOC_FREE(lock_order);
return NULL;
}
(void)talloc_steal(rec, lock_order);
rec->db = db;
- TALLOC_FREE(frame);
return rec;
}
diff --git a/lib/dbwrap/dbwrap_cache.c b/lib/dbwrap/dbwrap_cache.c
index d97242e..c5f7cce 100644
--- a/lib/dbwrap/dbwrap_cache.c
+++ b/lib/dbwrap/dbwrap_cache.c
@@ -32,15 +32,27 @@ struct db_cache_ctx {
static bool dbwrap_cache_validate(struct db_cache_ctx *ctx)
{
- if (ctx->seqnum == dbwrap_get_seqnum(ctx->backing)) {
+ int backing_seqnum;
+
+ backing_seqnum = dbwrap_get_seqnum(ctx->backing);
+ if (backing_seqnum == ctx->seqnum) {
return true;
}
+
TALLOC_FREE(ctx->positive);
ctx->positive = db_open_rbt(ctx);
+ if (ctx->positive == NULL) {
+ return false;
+ }
+
TALLOC_FREE(ctx->negative);
ctx->negative = db_open_rbt(ctx);
+ if (ctx->negative == NULL) {
+ return false;
+ }
- return ((ctx->positive != NULL) && (ctx->negative != NULL));
+ ctx->seqnum = backing_seqnum;
+ return true;
}
static NTSTATUS dbwrap_cache_parse_record(
@@ -57,13 +69,13 @@ static NTSTATUS dbwrap_cache_parse_record(
return NT_STATUS_NO_MEMORY;
}
+ if (dbwrap_exists(ctx->negative, key)) {
+ return NT_STATUS_NOT_FOUND;
+ }
status = dbwrap_parse_record(ctx->positive, key, parser, private_data);
if (NT_STATUS_IS_OK(status)) {
return status;
}
- if (dbwrap_exists(ctx->negative, key)) {
- return NT_STATUS_NOT_FOUND;
- }
status = dbwrap_fetch(ctx->backing, talloc_tos(), key, &value);
diff --git a/lib/tdb/common/lock.c b/lib/tdb/common/lock.c
index 4dfefd5..486de79 100644
--- a/lib/tdb/common/lock.c
+++ b/lib/tdb/common/lock.c
@@ -297,14 +297,17 @@ int tdb_nest_lock(struct tdb_context *tdb, uint32_t offset, int ltype,
return 0;
}
- new_lck = (struct tdb_lock_type *)realloc(
- tdb->lockrecs,
- sizeof(*tdb->lockrecs) * (tdb->num_lockrecs+1));
- if (new_lck == NULL) {
- errno = ENOMEM;
- return -1;
+ if (tdb->num_lockrecs == tdb->lockrecs_array_length) {
+ new_lck = (struct tdb_lock_type *)realloc(
+ tdb->lockrecs,
+ sizeof(*tdb->lockrecs) * (tdb->num_lockrecs+1));
+ if (new_lck == NULL) {
+ errno = ENOMEM;
+ return -1;
+ }
+ tdb->lockrecs_array_length = tdb->num_lockrecs+1;
+ tdb->lockrecs = new_lck;
}
- tdb->lockrecs = new_lck;
/* Since fcntl locks don't nest, we do a lock for the first one,
and simply bump the count for future ones */
@@ -312,9 +315,11 @@ int tdb_nest_lock(struct tdb_context *tdb, uint32_t offset, int ltype,
return -1;
}
- tdb->lockrecs[tdb->num_lockrecs].off = offset;
- tdb->lockrecs[tdb->num_lockrecs].count = 1;
- tdb->lockrecs[tdb->num_lockrecs].ltype = ltype;
+ new_lck = &tdb->lockrecs[tdb->num_lockrecs];
+
+ new_lck->off = offset;
+ new_lck->count = 1;
+ new_lck->ltype = ltype;
tdb->num_lockrecs++;
return 0;
@@ -481,10 +486,6 @@ int tdb_nest_unlock(struct tdb_context *tdb, uint32_t offset, int ltype,
* a completely idle tdb we should get rid of the locked array.
*/
- if (tdb->num_lockrecs == 0) {
- SAFE_FREE(tdb->lockrecs);
- }
-
if (ret)
TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_unlock: An error occurred unlocking!\n"));
return ret;
@@ -894,9 +895,6 @@ void tdb_release_transaction_locks(struct tdb_context *tdb)
}
}
tdb->num_lockrecs = active;
- if (tdb->num_lockrecs == 0) {
- SAFE_FREE(tdb->lockrecs);
- }
}
/* Following functions are added specifically to support CTDB. */
diff --git a/lib/tdb/common/open.c b/lib/tdb/common/open.c
index 05d7cae..6ff37ca 100644
--- a/lib/tdb/common/open.c
+++ b/lib/tdb/common/open.c
@@ -629,6 +629,7 @@ static int tdb_reopen_internal(struct tdb_context *tdb, bool active_lock)
/* We may still think we hold the active lock. */
tdb->num_lockrecs = 0;
SAFE_FREE(tdb->lockrecs);
+ tdb->lockrecs_array_length = 0;
if (active_lock && tdb_nest_lock(tdb, ACTIVE_LOCK, F_RDLCK, TDB_LOCK_WAIT) == -1) {
TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_reopen: failed to obtain active lock\n"));
diff --git a/lib/tdb/common/tdb_private.h b/lib/tdb/common/tdb_private.h
index ce92188..7227b43 100644
--- a/lib/tdb/common/tdb_private.h
+++ b/lib/tdb/common/tdb_private.h
@@ -197,6 +197,7 @@ struct tdb_context {
struct tdb_lock_type allrecord_lock; /* .offset == upgradable */
int num_lockrecs;
struct tdb_lock_type *lockrecs; /* only real locks, all with count>0 */
+ int lockrecs_array_length;
enum TDB_ERROR ecode; /* error code for last tdb error */
uint32_t hash_size;
uint32_t flags; /* the flags passed to tdb_open */
diff --git a/lib/util/charset/iconv.c b/lib/util/charset/iconv.c
index 1c507b4..c5b45fe 100644
--- a/lib/util/charset/iconv.c
+++ b/lib/util/charset/iconv.c
@@ -127,20 +127,8 @@ _PUBLIC_ size_t smb_iconv(smb_iconv_t cd,
#ifndef SMB_ICONV_BUFSIZE
#define SMB_ICONV_BUFSIZE 2048
#endif
- TALLOC_CTX *mem_ctx;
size_t bufsize;
- char *cvtbuf;
-
-#if _SAMBA_BUILD_ == 3
- mem_ctx = talloc_tos();
-#else
- mem_ctx = cd;
-#endif
- cvtbuf = talloc_array(mem_ctx, char, SMB_ICONV_BUFSIZE);
-
- if (!cvtbuf) {
- return (size_t)-1;
- }
+ char cvtbuf[SMB_ICONV_BUFSIZE];
while (*inbytesleft > 0) {
char *bufp1 = cvtbuf;
@@ -161,7 +149,6 @@ _PUBLIC_ size_t smb_iconv(smb_iconv_t cd,
if (cd->push(cd->cd_push,
&bufp2, &bufsize,
outbuf, outbytesleft) == -1) {
- talloc_free(cvtbuf);
return -1;
} else if (pull_failed) {
/* We want the pull errno if possible */
@@ -169,7 +156,6 @@ _PUBLIC_ size_t smb_iconv(smb_iconv_t cd,
return -1;
}
}
- talloc_free(cvtbuf);
}
return 0;
diff --git a/source3/locking/brlock.c b/source3/locking/brlock.c
index e92a2cf..c51d66b 100644
--- a/source3/locking/brlock.c
+++ b/source3/locking/brlock.c
@@ -1699,10 +1699,16 @@ static bool validate_lock_entries(TALLOC_CTX *mem_ctx,
unsigned int i;
unsigned int num_valid_entries = 0;
struct lock_struct *locks = *pplocks;
- TALLOC_CTX *frame = talloc_stackframe();
+ TALLOC_CTX *frame;
struct server_id *ids;
bool *exists;
+ if (*pnum_entries == 0) {
+ return true;
+ }
+
+ frame = talloc_stackframe();
+
ids = talloc_array(frame, struct server_id, *pnum_entries);
if (ids == NULL) {
DEBUG(0, ("validate_lock_entries: "
diff --git a/source3/locking/share_mode_lock.c b/source3/locking/share_mode_lock.c
index 5d7a08c..940d125 100644
--- a/source3/locking/share_mode_lock.c
+++ b/source3/locking/share_mode_lock.c
@@ -369,36 +369,35 @@ struct share_mode_lock *get_share_mode_lock(
const struct smb_filename *smb_fname,
const struct timespec *old_write_time)
{
- TALLOC_CTX *frame = talloc_stackframe();
-
struct share_mode_lock *lck;
+ lck = talloc(mem_ctx, struct share_mode_lock);
+ if (lck == NULL) {
+ DEBUG(1, ("talloc failed\n"));
+ return NULL;
+ }
+
if (the_lock == NULL) {
the_lock = get_share_mode_lock_internal(
- frame, id, servicepath, smb_fname, old_write_time);
+ lck, id, servicepath, smb_fname, old_write_time);
if (the_lock == NULL) {
goto fail;
}
talloc_set_destructor(the_lock, the_lock_destructor);
+ } else {
+ if (talloc_reference(lck, the_lock) == NULL) {
+ DEBUG(1, ("talloc_reference failed\n"));
+ goto fail;
+ }
}
if (!file_id_equal(&the_lock->data->id, &id)) {
DEBUG(1, ("Can not lock two share modes simultaneously\n"));
goto fail;
}
- lck = talloc(mem_ctx, struct share_mode_lock);
- if (lck == NULL) {
- DEBUG(1, ("talloc failed\n"));
- goto fail;
- }
- if (talloc_reference(lck, the_lock) == NULL) {
- DEBUG(1, ("talloc_reference failed\n"));
- goto fail;
- }
lck->data = the_lock->data;
- TALLOC_FREE(frame);
return lck;
fail:
- TALLOC_FREE(frame);
+ TALLOC_FREE(lck);
return NULL;
}
diff --git a/source3/smbd/files.c b/source3/smbd/files.c
index c64c841..ba24eda 100644
--- a/source3/smbd/files.c
+++ b/source3/smbd/files.c
@@ -688,6 +688,45 @@ NTSTATUS dup_file_fsp(struct smb_request *req, files_struct *from,
return fsp_set_smb_fname(to, from->fsp_name);
}
+/*
+ * This routine improves performance for operations temporarily acting on a
+ * full path. It is equivalent to the much more expensive
+ *
+ * talloc_asprintf(talloc_tos(), "%s/%s", dir, name)
+ *
+ * This actually does make a difference in metadata-heavy workloads (i.e. the
+ * "standard" client.txt nbench run.
+ */
+
+ssize_t full_path_tos(const char *dir, const char *name,
+ char *tmpbuf, size_t tmpbuf_len,
+ char **pdst, char **to_free)
+{
+ size_t dirlen, namelen, len;
+ char *dst;
+
+ dirlen = strlen(dir);
+ namelen = strlen(name);
+ len = dirlen + namelen + 1;
+
+ if (len < tmpbuf_len) {
+ dst = tmpbuf;
+ *to_free = NULL;
+ } else {
+ dst = talloc_array(talloc_tos(), char, len+1);
+ if (dst == NULL) {
+ return -1;
+ }
+ *to_free = dst;
+ }
+
+ memcpy(dst, dir, dirlen);
+ dst[dirlen] = '/';
+ memcpy(dst+dirlen+1, name, namelen+1);
+ *pdst = dst;
+ return len;
+}
+
/**
* Return a jenkins hash of a pathname on a connection.
*/
@@ -695,23 +734,24 @@ NTSTATUS dup_file_fsp(struct smb_request *req, files_struct *from,
NTSTATUS file_name_hash(connection_struct *conn,
const char *name, uint32_t *p_name_hash)
{
- char *fullpath = NULL;
+ char tmpbuf[1024];
+ char *fullpath, *to_free;
+ size_t len;
/* Set the hash of the full pathname. */
- fullpath = talloc_asprintf(talloc_tos(),
- "%s/%s",
- conn->connectpath,
- name);
- if (!fullpath) {
+
+ len = full_path_tos(conn->connectpath, name, tmpbuf, sizeof(tmpbuf),
+ &fullpath, &to_free);
+ if (len == -1) {
return NT_STATUS_NO_MEMORY;
}
- *p_name_hash = hash(fullpath, talloc_get_size(fullpath), 0);
+ *p_name_hash = hash(fullpath, len+1, 0);
DEBUG(10,("file_name_hash: %s hash 0x%x\n",
- fullpath,
+ fullpath,
(unsigned int)*p_name_hash ));
- TALLOC_FREE(fullpath);
+ TALLOC_FREE(to_free);
return NT_STATUS_OK;
}
diff --git a/source3/smbd/notify.c b/source3/smbd/notify.c
index 4842d6f..078bc99 100644
--- a/source3/smbd/notify.c
+++ b/source3/smbd/notify.c
@@ -418,19 +418,21 @@ void notify_fname(connection_struct *conn, uint32 action, uint32 filter,
const char *path)
{
struct notify_context *notify_ctx = conn->sconn->notify_ctx;
- char *fullpath;
+ char *fullpath, *to_free;
+ char tmpbuf[1024];
+ ssize_t len;
if (path[0] == '.' && path[1] == '/') {
path += 2;
}
- fullpath = talloc_asprintf(talloc_tos(), "%s/%s", conn->connectpath,
- path);
- if (fullpath == NULL) {
- DEBUG(0, ("asprintf failed\n"));
+ len = full_path_tos(conn->connectpath, path, tmpbuf, sizeof(tmpbuf),
+ &fullpath, &to_free);
+ if (len == -1) {
+ DEBUG(0, ("full_path_tos failed\n"));
return;
}
notify_trigger(notify_ctx, action, filter, fullpath);
- TALLOC_FREE(fullpath);
+ TALLOC_FREE(to_free);
}
static void notify_fsp(files_struct *fsp, uint32 action, const char *name)
diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h
index a550dd7..36012e6 100644
--- a/source3/smbd/proto.h
+++ b/source3/smbd/proto.h
@@ -397,6 +397,9 @@ NTSTATUS file_name_hash(connection_struct *conn,
const char *name, uint32_t *p_name_hash);
NTSTATUS fsp_set_smb_fname(struct files_struct *fsp,
const struct smb_filename *smb_fname_in);
+ssize_t full_path_tos(const char *dir, const char *name,
+ char *tmpbuf, size_t tmpbuf_len,
+ char **pdst, char **to_free);
/* The following definitions come from smbd/ipc.c */
diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c
index e02d646..2667848 100644
--- a/source3/smbd/trans2.c
+++ b/source3/smbd/trans2.c
@@ -258,8 +258,8 @@ NTSTATUS get_ea_names_from_file(TALLOC_CTX *mem_ctx, connection_struct *conn,
return map_nt_error_from_unix(errno);
}
- DEBUG(10, ("get_ea_list_from_file: ea_namelist size = %u\n",
- (unsigned int)sizeret));
+ DEBUG(10, ("%s: ea_namelist size = %u\n",
+ __func__, (unsigned int)sizeret));
if (sizeret == 0) {
TALLOC_FREE(names);
diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c
index a8e181a..44690c2 100644
--- a/source3/smbd/vfs.c
+++ b/source3/smbd/vfs.c
@@ -828,7 +828,7 @@ int vfs_ChDir(connection_struct *conn, const char *path)
LastDir = SMB_STRDUP("");
}
- if (strcsequal(path,".")) {
+ if (ISDOT(path)) {
return 0;
}
diff --git a/source3/torture/torture.c b/source3/torture/torture.c
index 6789d85..edb12b0 100644
--- a/source3/torture/torture.c
+++ b/source3/torture/torture.c
@@ -8921,7 +8921,7 @@ static bool run_local_wbclient(int dummy)
BlockSignals(True, SIGPIPE);
- ev = tevent_context_init_byname(talloc_tos(), "epoll");
+ ev = tevent_context_init(talloc_tos());
if (ev == NULL) {
goto fail;
}
--
Samba Shared Repository
More information about the samba-cvs
mailing list