*
*/
/*
- Copyright (C) 2000-2005 Kern Sibbald
+ Copyright (C) 2000-2006 Kern Sibbald
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
bool init_done = false;
/* Global static variables */
-static int foreground = 0;
+static bool foreground = 0;
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
static workq_t dird_workq; /* queue for processing connections */
static void usage()
{
fprintf(stderr, _(
-"Copyright (C) 2000-2005 Kern Sibbald.\n"
+"Copyright (C) 2000-%s Kern Sibbald.\n"
"\nVersion: %s (%s)\n\n"
"Usage: stored [options] [-c config_file] [config_file]\n"
" -c <file> use <file> as configuration file\n"
" -u <user> userid to <user>\n"
" -v verbose user messages\n"
" -? print this message.\n"
-"\n"), VERSION, BDATE);
+"\n"), BYEAR, VERSION, BDATE);
exit(1);
}
* Main Bacula Unix Storage Daemon
*
*/
+#if defined(HAVE_WIN32)
+#define main BaculaMain
+#endif
+
int main (int argc, char *argv[])
{
int ch;
- int no_signals = FALSE;
- int test_config = FALSE;
+ bool no_signals = false;
+ bool test_config = false;
pthread_t thid;
char *uid = NULL;
char *gid = NULL;
break;
case 'f': /* run in foreground */
- foreground = TRUE;
+ foreground = true;
break;
case 'g': /* set group id */
break;
case 's': /* no signals */
- no_signals = TRUE;
+ no_signals = true;
break;
case 't':
- test_config = TRUE;
+ test_config = true;
break;
case 'u': /* set uid */
parse_config(configfile);
- if (init_tls() != 0) {
- Jmsg((JCR *)NULL, M_ERROR_TERM, 0, _("TLS library initialization failed.\n"));
+ if (init_crypto() != 0) {
+ Jmsg((JCR *)NULL, M_ERROR_TERM, 0, _("Cryptography library initialization failed.\n"));
}
if (!check_resources()) {
Jmsg((JCR *)NULL, M_ERROR_TERM, 0, _("Please correct configuration file: %s\n"), configfile);
}
+ init_reservations_lock();
+
if (test_config) {
terminate_stored(0);
}
/* Ensure that Volume Session Time and Id are both
* set and are both non-zero.
*/
- VolSessionTime = (long)daemon_start_time;
+ VolSessionTime = (uint32_t)daemon_start_time;
if (VolSessionTime == 0) { /* paranoid */
Jmsg0(NULL, M_ABORT, 0, _("Volume Session Time is ZERO!\n"));
}
foreach_res(device, R_DEVICE) {
Dmsg1(90, "calling init_dev %s\n", device->device_name);
- device->dev = dev = init_dev(NULL, device);
+ dev = init_dev(NULL, device);
Dmsg1(10, "SD init done %s\n", device->device_name);
if (!dev) {
Jmsg1(NULL, M_ERROR, 0, _("Could not initialize %s\n"), device->device_name);
continue;
}
- dcr = new_dcr(jcr, dev);
+ jcr->dcr = dcr = new_dcr(jcr, dev);
if (dev->is_autochanger()) {
/* If autochanger set slot in dev sturcture */
get_autochanger_loaded_slot(dcr);
Jmsg1(NULL, M_ERROR, 0, _("Could not open device %s\n"), dev->print_name());
Dmsg1(20, "Could not open device %s\n", dev->print_name());
free_dcr(dcr);
+ jcr->dcr = NULL;
continue;
}
}
}
}
free_dcr(dcr);
+ jcr->dcr = NULL;
}
free_jcr(jcr);
init_done = true;
pthread_cond_broadcast(&jcr->dcr->dev->wait_next_vol);
pthread_cond_broadcast(&wait_device_release);
}
+ if (jcr->read_dcr && jcr->read_dcr->dev && jcr->read_dcr->dev->dev_blocked) {
+ pthread_cond_broadcast(&jcr->read_dcr->dev->wait_next_vol);
+ pthread_cond_broadcast(&wait_device_release);
+ }
bmicrosleep(0, 50000);
}
free_jcr(jcr);
Dmsg1(10, "Term device %s\n", device->device_name);
if (device->dev) {
free_volume(device->dev);
- term_dev(device->dev);
+ device->dev->term();
+ device->dev = NULL;
} else {
Dmsg1(10, "No dev structure %s\n", device->device_name);
}
if (debug_level > 10) {
print_memory_pool_stats();
}
+ term_reservations_lock();
term_msg();
stop_watchdog();
- cleanup_tls();
+ cleanup_crypto();
free_volume_list();
close_memory_pool();