[SCM] Samba Shared Repository - branch v3-5-test updated

Karolin Seeger kseeger at samba.org
Sat Jan 15 11:35:07 MST 2011


The branch, v3-5-test has been updated
       via  b6268f5 Revert "s3-printing: update parent smbd pcap cache"
       via  e4579ea Revert "s3-printing: reload shares after pcap cache fill"
      from  8917d84 s3: Fix bug 7917: Yet another bug in chain_reply

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-5-test


- Log -----------------------------------------------------------------
commit b6268f507fa3276c2ef22c58bad400a3fed48cd9
Author: Karolin Seeger <kseeger at samba.org>
Date:   Sat Jan 15 19:19:43 2011 +0100

    Revert "s3-printing: update parent smbd pcap cache"
    
    This reverts commit 5a2b2d4aeb6fe4af13aa0c92d22ba5bc9b7f7e13.

commit e4579eab7fe3eab7a5209e6de74e6fd2f53099d0
Author: Karolin Seeger <kseeger at samba.org>
Date:   Sat Jan 15 19:19:13 2011 +0100

    Revert "s3-printing: reload shares after pcap cache fill"
    
    This reverts commit a8a01e4a3dcafd97372021d0d6f859fd3a69235f.
    
    This commit seems to break 'make test'.

-----------------------------------------------------------------------

Summary of changes:
 source3/include/local.h       |    1 -
 source3/include/proto.h       |    4 ++--
 source3/printing/load.c       |    5 +++--
 source3/printing/pcap.c       |   18 ++++--------------
 source3/printing/print_cups.c |   33 +++++++++------------------------
 source3/smbd/process.c        |    4 ++--
 source3/smbd/server.c         |   28 ++++++----------------------
 source3/web/swat.c            |    4 ++--
 8 files changed, 28 insertions(+), 69 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/local.h b/source3/include/local.h
index d65cc00..a88b17b 100644
--- a/source3/include/local.h
+++ b/source3/include/local.h
@@ -148,7 +148,6 @@
 #define LPQ_LOCK_TIMEOUT (5)
 #define NMBD_INTERFACES_RELOAD (120)
 #define NMBD_UNEXPECTED_TIMEOUT (15)
-#define SMBD_HOUSEKEEPING_INTERVAL SMBD_SELECT_TIMEOUT
 
 /* the following are in milliseconds */
 #define LOCK_RETRY_TIMEOUT (100)
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 8250e54..bfcd012 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -4897,7 +4897,7 @@ void pcap_cache_destroy_specific(struct pcap_cache **ppcache);
 bool pcap_cache_add(const char *name, const char *comment);
 bool pcap_cache_loaded(void);
 void pcap_cache_replace(const struct pcap_cache *cache);
-void pcap_cache_reload(void (*post_cache_fill_fn)(void));
+void pcap_cache_reload(void);
 bool pcap_printername_ok(const char *printername);
 void pcap_printer_fn_specific(const struct pcap_cache *, void (*fn)(const char *, const char *, void *), void *);
 void pcap_printer_fn(void (*fn)(const char *, const char *, void *), void *);
@@ -4908,7 +4908,7 @@ bool aix_cache_reload(void);
 
 /* The following definitions come from printing/print_cups.c  */
 
-bool cups_cache_reload(void (*post_cache_fill_fn)(void));
+bool cups_cache_reload(void);
 bool cups_pull_comment_location(NT_PRINTER_INFO_LEVEL_2 *printer);
 
 /* The following definitions come from printing/print_generic.c  */
diff --git a/source3/printing/load.c b/source3/printing/load.c
index 00da9cb..874f7f2 100644
--- a/source3/printing/load.c
+++ b/source3/printing/load.c
@@ -53,11 +53,12 @@ static void add_auto_printers(void)
 }
 
 /***************************************************************************
-load automatic printer services from pre-populated pcap cache
+load automatic printer services
 ***************************************************************************/
 void load_printers(void)
 {
-	SMB_ASSERT(pcap_cache_loaded());
+	if (!pcap_cache_loaded())
+		pcap_cache_reload();
 
 	add_auto_printers();
 
diff --git a/source3/printing/pcap.c b/source3/printing/pcap.c
index 0d6480c..a6bf52a 100644
--- a/source3/printing/pcap.c
+++ b/source3/printing/pcap.c
@@ -125,14 +125,13 @@ void pcap_cache_replace(const struct pcap_cache *pcache)
 	}
 }
 
-void pcap_cache_reload(void (*post_cache_fill_fn)(void))
+void pcap_cache_reload(void)
 {
 	const char *pcap_name = lp_printcapname();
 	bool pcap_reloaded = False;
 	struct pcap_cache *tmp_cache = NULL;
 	XFILE *pcap_file;
 	char *pcap_line;
-	bool post_cache_fill_fn_handled = false;
 
 	DEBUG(3, ("reloading printcap cache\n"));
 
@@ -147,12 +146,7 @@ void pcap_cache_reload(void (*post_cache_fill_fn)(void))
 
 #ifdef HAVE_CUPS
 	if (strequal(pcap_name, "cups")) {
-		pcap_reloaded = cups_cache_reload(post_cache_fill_fn);
-		/*
-		 * cups_cache_reload() is async and calls post_cache_fill_fn()
-		 * on successful completion
-		 */
-		post_cache_fill_fn_handled = true;
+		pcap_reloaded = cups_cache_reload();
 		goto done;
 	}
 #endif
@@ -248,13 +242,9 @@ void pcap_cache_reload(void (*post_cache_fill_fn)(void))
 done:
 	DEBUG(3, ("reload status: %s\n", (pcap_reloaded) ? "ok" : "error"));
 
-	if (pcap_reloaded) {
+	if (pcap_reloaded)
 		pcap_cache_destroy_specific(&tmp_cache);
-		if ((post_cache_fill_fn_handled == false)
-		 && (post_cache_fill_fn != NULL)) {
-			post_cache_fill_fn();
-		}
-	} else {
+	else {
 		pcap_cache_destroy_specific(&pcap_cache);
 		pcap_cache = tmp_cache;
 	}
diff --git a/source3/printing/print_cups.c b/source3/printing/print_cups.c
index 82b4314..4c24e44 100644
--- a/source3/printing/print_cups.c
+++ b/source3/printing/print_cups.c
@@ -445,19 +445,13 @@ static bool cups_pcap_load_async(int *pfd)
 	_exit(0);
 }
 
-struct cups_async_cb_args {
-	int pipe_fd;
-	void (*post_cache_fill_fn)(void);
-};
-
 static void cups_async_callback(struct event_context *event_ctx,
 				struct fd_event *event,
 				uint16 flags,
 				void *p)
 {
 	TALLOC_CTX *frame = talloc_stackframe();
-	struct cups_async_cb_args *cb_args = (struct cups_async_cb_args *)p;
-	int fd = cb_args->pipe_fd;
+	int fd = *(int *)p;
 	struct pcap_cache *tmp_pcap_cache = NULL;
 
 	DEBUG(5,("cups_async_callback: callback received for printer data. "
@@ -551,36 +545,27 @@ static void cups_async_callback(struct event_context *event_ctx,
 
 		/* And the systemwide pcap cache. */
 		pcap_cache_replace(local_pcap_copy);
-
-		/* Caller may have requested post cache fill callback */
-		if (cb_args->post_cache_fill_fn) {
-			cb_args->post_cache_fill_fn();
-		}
 	} else {
 		DEBUG(2,("cups_async_callback: failed to read a new "
 			"printer list\n"));
 	}
 	close(fd);
-	TALLOC_FREE(cb_args);
+	TALLOC_FREE(p);
 	TALLOC_FREE(cache_fd_event);
 }
 
-bool cups_cache_reload(void (*post_cache_fill_fn)(void))
+bool cups_cache_reload(void)
 {
-	struct cups_async_cb_args *cb_args;
-	int *p_pipe_fd;
+	int *p_pipe_fd = TALLOC_P(NULL, int);
 
-	cb_args = TALLOC_P(NULL, struct cups_async_cb_args);
-	if (!cb_args) {
+	if (!p_pipe_fd) {
 		return false;
 	}
-	cb_args->post_cache_fill_fn = post_cache_fill_fn;
-	p_pipe_fd = &cb_args->pipe_fd;
+
 	*p_pipe_fd = -1;
 
 	/* Set up an async refresh. */
 	if (!cups_pcap_load_async(p_pipe_fd)) {
-		talloc_free(cb_args);
 		return false;
 	}
 	if (!local_pcap_copy) {
@@ -593,7 +578,7 @@ bool cups_cache_reload(void (*post_cache_fill_fn)(void))
 		cups_async_callback(smbd_event_context(),
 					NULL,
 					EVENT_FD_READ,
-					(void *)cb_args);
+					(void *)p_pipe_fd);
 		if (!local_pcap_copy) {
 			return false;
 		}
@@ -610,10 +595,10 @@ bool cups_cache_reload(void (*post_cache_fill_fn)(void))
 					NULL, *p_pipe_fd,
 					EVENT_FD_READ,
 					cups_async_callback,
-					(void *)cb_args);
+					(void *)p_pipe_fd);
 		if (!cache_fd_event) {
 			close(*p_pipe_fd);
-			talloc_free(cb_args);
+			TALLOC_FREE(p_pipe_fd);
 			return false;
 		}
 	}
diff --git a/source3/smbd/process.c b/source3/smbd/process.c
index cbcbfad..f7b0f4c 100644
--- a/source3/smbd/process.c
+++ b/source3/smbd/process.c
@@ -2079,7 +2079,7 @@ void check_reload(time_t t)
 			|| (t-last_printer_reload_time  < 0) ) 
 		{
 			DEBUG( 3,( "Printcap cache time expired.\n"));
-			pcap_cache_reload(&reload_printers);
+			reload_printers();
 			last_printer_reload_time = t;
 		}
 	}
@@ -2365,7 +2365,7 @@ void smbd_process(void)
 	}
 
 	if (!(event_add_idle(smbd_event_context(), NULL,
-			     timeval_set(SMBD_HOUSEKEEPING_INTERVAL, 0),
+			     timeval_set(SMBD_SELECT_TIMEOUT, 0),
 			     "housekeeping", housekeeping_fn, NULL))) {
 		DEBUG(0, ("Could not add housekeeping event\n"));
 		exit(1);
diff --git a/source3/smbd/server.c b/source3/smbd/server.c
index 45d9270..0c59135 100644
--- a/source3/smbd/server.c
+++ b/source3/smbd/server.c
@@ -541,14 +541,6 @@ static bool smbd_open_one_socket(struct smbd_parent_context *parent,
 	return true;
 }
 
-static bool parent_housekeeping_fn(const struct timeval *now, void *private_data)
-{
-	DEBUG(5, ("houskeeping\n"));
-	/* check if we need to reload services */
-	check_reload(time(NULL));
-	return true;
-}
-
 /****************************************************************************
  Open the socket communication.
 ****************************************************************************/
@@ -676,14 +668,6 @@ static bool open_sockets_smbd(struct smbd_parent_context *parent,
 	claim_connection(NULL,"",
 			 FLAG_MSG_GENERAL|FLAG_MSG_SMBD|FLAG_MSG_DBWRAP);
 
-	if (!(event_add_idle(smbd_event_context(), NULL,
-			     timeval_set(SMBD_HOUSEKEEPING_INTERVAL, 0),
-			     "parent_housekeeping", parent_housekeeping_fn,
-			     parent))) {
-		DEBUG(0, ("Could not add housekeeping event\n"));
-		exit(1);
-	}
-
         /* Listen to messages */
 
 	messaging_register(smbd_messaging_context(), NULL,
@@ -750,9 +734,9 @@ static void smbd_parent_loop(struct smbd_parent_context *parent)
 /* NOTREACHED	return True; */
 }
 
-/***************************************************************************
- purge stale printers and reload from pre-populated pcap cache
-***************************************************************************/
+/****************************************************************************
+ Reload printers
+**************************************************************************/
 void reload_printers(void)
 {
 	int snum;
@@ -760,9 +744,9 @@ void reload_printers(void)
 	int pnum = lp_servicenumber(PRINTERS_NAME);
 	const char *pname;
 
-	SMB_ASSERT(pcap_cache_loaded());
+	pcap_cache_reload();
 
-	DEBUG(10, ("reloading printer services from pcap cache\n"));
+	/* remove stale printers */
 	for (snum = 0; snum < n_services; snum++) {
 		/* avoid removing PRINTERS_NAME or non-autoloaded printers */
 		if (snum == pnum || !(lp_snum_ok(snum) && lp_print_ok(snum) &&
@@ -809,7 +793,7 @@ bool reload_services(bool test)
 
 	ret = lp_load(get_dyn_CONFIGFILE(), False, False, True, True);
 
-	pcap_cache_reload(&reload_printers);
+	reload_printers();
 
 	/* perhaps the config filename is now set */
 	if (!test)
diff --git a/source3/web/swat.c b/source3/web/swat.c
index baffa44..230b161 100644
--- a/source3/web/swat.c
+++ b/source3/web/swat.c
@@ -490,7 +490,7 @@ static int save_reload(int snum)
                 return 0;
         }
 	iNumNonAutoPrintServices = lp_numservices();
-	pcap_cache_reload(&load_printers);
+	load_printers();
 
 	return 1;
 }
@@ -1434,7 +1434,7 @@ const char *lang_msg_rotate(TALLOC_CTX *ctx, const char *msgid)
 	load_config(True);
 	load_interfaces();
 	iNumNonAutoPrintServices = lp_numservices();
-	pcap_cache_reload(&load_printers);
+	load_printers();
 
 	cgi_setup(get_dyn_SWATDIR(), !demo_mode);
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list