]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/stored.c
First go at supporting a mount and unmount wrapper for tape devices. Initial cleanup...
[bacula/bacula] / bacula / src / stored / stored.c
index 3368cbdd6bd6884ac0b656baea1619eaf4e8d5f0..8c0bd6f41667cae754d1a67bb8ff5a5acbe49178 100644 (file)
 #include "bacula.h"
 #include "stored.h"
 
+/* TODO: fix problem with bls, bextract
+ * that use findlib and already declare
+ * filed plugins 
+ */
+#include "sd_plugins.h"         
+
 #ifdef HAVE_PYTHON
 
 #undef _POSIX_C_SOURCE
@@ -250,10 +256,18 @@ int main (int argc, char *argv[])
       init_stack_dump();              /* pick up new pid */
    }
 
-   create_pid_file(me->pid_directory, "bacula-sd", get_first_port_host_order(me->sdaddrs));
-   read_state_file(me->working_directory, "bacula-sd", get_first_port_host_order(me->sdaddrs));
+   create_pid_file(me->pid_directory, "bacula-sd",
+                   get_first_port_host_order(me->sdaddrs));
+   read_state_file(me->working_directory, "bacula-sd", 
+                   get_first_port_host_order(me->sdaddrs));
+
+   /* Make sure on Solaris we can run concurrent, watch dog + servers + misc */
+   set_thread_concurrency(me->max_concurrent_jobs * 2 + 4);
+   lmgr_init_thread(); /* initialize the lockmanager stack */
 
-   drop(uid, gid);
+   load_sd_plugins(me->plugin_directory);
+
+   drop(uid, gid, false);
 
    cleanup_old_files();
 
@@ -278,13 +292,10 @@ int main (int argc, char *argv[])
    init_python_interpreter(&python_args);
 #endif /* HAVE_PYTHON */
 
-   /* Make sure on Solaris we can run concurrent, watch dog + servers + misc */
-   set_thread_concurrency(me->max_concurrent_jobs * 2 + 4);
-
     /*
      * Start the device allocation thread
      */
-   create_volume_list();              /* do before device_init */
+   create_volume_lists();             /* do before device_init */
    if (pthread_create(&thid, NULL, device_initialization, NULL) != 0) {
       berrno be;
       Emsg1(M_ABORT, 0, _("Unable to create thread. ERR=%s\n"), be.bstrerror());
@@ -625,7 +636,8 @@ void terminate_stored(int sig)
 
    Dmsg1(200, "In terminate_stored() sig=%d\n", sig);
 
-   free_volume_list();
+   unload_plugins();
+   free_volume_lists();
 
    foreach_res(device, R_DEVICE) {
       Dmsg1(10, "Term device %s\n", device->device_name);
@@ -655,6 +667,7 @@ void terminate_stored(int sig)
    cleanup_crypto();
    term_reservations_lock();
    close_memory_pool();
+   lmgr_cleanup_main();
 
    sm_dump(false);                    /* dump orphaned buffers */
    exit(sig);