mirror of
https://github.com/samba-team/samba.git
synced 2025-01-12 09:18:10 +03:00
Fix slowdown because of enumerating all print queues on every smbd startup.
Jeremy.
This commit is contained in:
parent
e504d1170d
commit
6efd17ef78
@ -252,7 +252,7 @@ static BOOL upgrade_to_version_3(void)
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Open the NT printing tdb.
|
||||
Open the NT printing tdbs. Done once before fork().
|
||||
****************************************************************************/
|
||||
|
||||
BOOL nt_printing_init(void)
|
||||
@ -263,6 +263,8 @@ BOOL nt_printing_init(void)
|
||||
if (tdb_drivers && tdb_printers && tdb_forms && local_pid == sys_getpid())
|
||||
return True;
|
||||
|
||||
if (tdb_drivers)
|
||||
tdb_close(tdb_drivers);
|
||||
tdb_drivers = tdb_open_log(lock_path("ntdrivers.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
|
||||
if (!tdb_drivers) {
|
||||
DEBUG(0,("nt_printing_init: Failed to open nt drivers database %s (%s)\n",
|
||||
@ -270,6 +272,8 @@ BOOL nt_printing_init(void)
|
||||
return False;
|
||||
}
|
||||
|
||||
if (tdb_printers)
|
||||
tdb_close(tdb_printers);
|
||||
tdb_printers = tdb_open_log(lock_path("ntprinters.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
|
||||
if (!tdb_printers) {
|
||||
DEBUG(0,("nt_printing_init: Failed to open nt printers database %s (%s)\n",
|
||||
@ -277,6 +281,8 @@ BOOL nt_printing_init(void)
|
||||
return False;
|
||||
}
|
||||
|
||||
if (tdb_forms)
|
||||
tdb_close(tdb_forms);
|
||||
tdb_forms = tdb_open_log(lock_path("ntforms.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
|
||||
if (!tdb_forms) {
|
||||
DEBUG(0,("nt_printing_init: Failed to open nt forms database %s (%s)\n",
|
||||
|
@ -154,6 +154,7 @@ static struct tdb_print_db *get_print_db_byname(const char *printername)
|
||||
struct tdb_print_db *p = NULL, *last_entry = NULL;
|
||||
int num_open = 0;
|
||||
pstring printdb_path;
|
||||
BOOL done_become_root = False;
|
||||
|
||||
for (p = print_db_head, last_entry = print_db_head; p; p = p->next) {
|
||||
/* Ensure the list terminates... JRA. */
|
||||
@ -209,9 +210,15 @@ static struct tdb_print_db *get_print_db_byname(const char *printername)
|
||||
pstrcat(printdb_path, printername);
|
||||
pstrcat(printdb_path, ".tdb");
|
||||
|
||||
become_root();
|
||||
if (geteuid() != 0) {
|
||||
become_root();
|
||||
done_become_root = True;
|
||||
}
|
||||
|
||||
p->tdb = tdb_open_log(printdb_path, 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
|
||||
unbecome_root();
|
||||
|
||||
if (done_become_root)
|
||||
unbecome_root();
|
||||
|
||||
if (!p->tdb) {
|
||||
DEBUG(0,("get_print_db: Failed to open printer backend database %s.\n",
|
||||
@ -255,8 +262,7 @@ static void close_all_print_db(void)
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Initialise the printing backend. Called once at startup.
|
||||
Does not survive a fork
|
||||
Initialise the printing backend. Called once at startup before the fork().
|
||||
****************************************************************************/
|
||||
|
||||
BOOL print_backend_init(void)
|
||||
@ -316,16 +322,7 @@ BOOL print_backend_init(void)
|
||||
|
||||
void printing_end(void)
|
||||
{
|
||||
struct tdb_print_db *p;
|
||||
|
||||
for (p = print_db_head; p; ) {
|
||||
struct tdb_print_db *next_p = p->next;
|
||||
if (p->tdb)
|
||||
tdb_close(p->tdb);
|
||||
DLIST_REMOVE(print_db_head, p);
|
||||
SAFE_FREE(p);
|
||||
p = next_p;
|
||||
}
|
||||
close_all_print_db(); /* Don't leave any open. */
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
@ -370,7 +370,10 @@ static BOOL open_sockets_smbd(BOOL is_daemon,const char *smb_ports)
|
||||
reset_globals_after_fork();
|
||||
|
||||
/* tdb needs special fork handling */
|
||||
tdb_reopen_all();
|
||||
if (tdb_reopen_all() == -1) {
|
||||
DEBUG(0,("tdb_reopen_all failed.\n"));
|
||||
return False;
|
||||
}
|
||||
|
||||
return True;
|
||||
}
|
||||
@ -859,6 +862,9 @@ static void usage(char *pname)
|
||||
register_msg_pool_usage();
|
||||
register_dmalloc_msgs();
|
||||
|
||||
if (!print_backend_init())
|
||||
exit(1);
|
||||
|
||||
/* Setup the main smbd so that we can get messages. */
|
||||
claim_connection(NULL,"",0,True,FLAG_MSG_GENERAL|FLAG_MSG_SMBD);
|
||||
|
||||
@ -881,9 +887,6 @@ static void usage(char *pname)
|
||||
if (!locking_init(0))
|
||||
exit(1);
|
||||
|
||||
if (!print_backend_init())
|
||||
exit(1);
|
||||
|
||||
if (!share_info_db_init())
|
||||
exit(1);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user