The branch, v3-4-test has been updated via ad45087 Revert "s3-printing: update parent smbd pcap cache" via 36ea03b Revert "s3-printing: reload shares after pcap cache fill" from fbcecec s3-rpcclient: Fix bug #7880: cmd_spoolss_deletedriver() returned without checking all architectures.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-4-test - Log ----------------------------------------------------------------- commit ad450870eacb114b3f15941a4478ba25701e035a Author: Karolin Seeger <ksee...@samba.org> Date: Sat Jan 15 19:06:42 2011 +0100 Revert "s3-printing: update parent smbd pcap cache" This reverts commit 2c2ce9caead5a13edb582313b7d36c7eb12a09fb. commit 36ea03bbe28122ce03de4969e254dd276cfe5a79 Author: Karolin Seeger <ksee...@samba.org> Date: Sat Jan 15 19:06:16 2011 +0100 Revert "s3-printing: reload shares after pcap cache fill" This reverts commit 9bc0cd243ac66126d42905dd8710d078094e0cd7. 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 46ed4ab..7c2893b 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -4869,7 +4869,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 *); @@ -4880,7 +4880,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 a8cc538..e2c8b7e 100644 --- a/source3/printing/print_cups.c +++ b/source3/printing/print_cups.c @@ -440,19 +440,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. " @@ -546,36 +540,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) { @@ -588,7 +573,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; } @@ -605,10 +590,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 4b2e6eb..2abea8f 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -1854,7 +1854,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; } } @@ -2123,7 +2123,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 6147526..2c5ce40 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -498,14 +498,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. ****************************************************************************/ @@ -633,14 +625,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, @@ -705,9 +689,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; @@ -715,9 +699,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) && @@ -764,7 +748,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 6741082..4bfb731 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