- Look at patches/bacula_db.b2z postgresql that loops during restore.
See Gregory Wright.
- Perhaps add read/write programs and/or plugins to FileSets.
-- Make sure Qmsgs are dequeued by FD and SD.
-- Check if ACLs allocated at dird_conf.c:1214 are being properly
- released.
+- Add delete JobId to regression.
- Add bscan to four-concurrent-jobs regression.
- Add IPv6 to regression
- Alternative to static linking "ldd prog" save all binaries listed,
- Doc update AllFromVol
- Doc dbcheck eliminate orphaned clients.
- Doc -p option in stored
+- Doc Phil's new delete job jobid scanning code.
- Document that console commands can be abbreviated.
- New IP address specification is used as follows:
[sdaddresses|diraddresses|fdaddresses] = { [[ip|ipv4|ipv6] = {
- Implement Ignore FileSet Change.
- Doc new duration time input editing.
- Bacula rescue CDROM implement isolinux
+- Make sure Qmsgs are dequeued by FD and SD.
+- Check if ACLs allocated at dird_conf.c:1214 are being properly
+ released.
utime_t RunTime;
Dmsg2(100, "Enter backup_cleanup %d %c\n", TermCode, TermCode);
+ dequeue_messages(jcr); /* display any queued messages */
memset(&mr, 0, sizeof(mr));
set_jcr_job_status(jcr, TermCode);
if (pass == 1) {
if (((alist **)item->value)[item->code] == NULL) {
((alist **)item->value)[item->code] = New(alist(10, owned_by_alist));
-// Dmsg1(900, "Defined new ACL alist at %d\n", item->code);
+ Dmsg1(900, "Defined new ACL alist at %d\n", item->code);
}
((alist **)item->value)[item->code]->append(bstrdup(lc->str));
-// Dmsg2(900, "Appended to %d %s\n", item->code, lc->str);
+ Dmsg2(900, "Appended to %d %s\n", item->code, lc->str);
}
token = lex_get_token(lc, T_ALL);
if (token == T_COMMA) {
double kbps;
Dmsg0(20, "In restore_cleanup\n");
+ dequeue_messages(jcr); /* display any queued messages */
set_jcr_job_status(jcr, TermCode);
update_job_end_record(jcr);
const char *Name;
// Dmsg1(100, "Enter verify_cleanup() TermCod=%d\n", TermCode);
+ dequeue_messages(jcr); /* display any queued messages */
JobId = jcr->jr.JobId;
set_jcr_job_status(jcr, TermCode);
/* Read command */
if (bnet_recv(dir) < 0) {
- break; /* connection terminated */
+ break; /* connection terminated */
}
dir->msg[dir->msglen] = 0;
Dmsg1(100, "<dird: %s", dir->msg);
found = false;
for (i=0; cmds[i].cmd; i++) {
- if (strncmp(cmds[i].cmd, dir->msg, strlen(cmds[i].cmd)) == 0) {
- found = true; /* indicate command found */
- if (!jcr->authenticated && cmds[i].func != hello_cmd) {
- bnet_fsend(dir, no_auth);
- bnet_sig(dir, BNET_EOD);
- break;
- }
- if ((jcr->authenticated) && (!cmds[i].monitoraccess) && (jcr->director->monitor)) {
+ if (strncmp(cmds[i].cmd, dir->msg, strlen(cmds[i].cmd)) == 0) {
+ found = true; /* indicate command found */
+ if (!jcr->authenticated && cmds[i].func != hello_cmd) {
+ bnet_fsend(dir, no_auth);
+ bnet_sig(dir, BNET_EOD);
+ break;
+ }
+ if ((jcr->authenticated) && (!cmds[i].monitoraccess) && (jcr->director->monitor)) {
Dmsg1(100, "Command %s illegal.\n", cmds[i].cmd);
- bnet_fsend(dir, illegal_cmd);
- bnet_sig(dir, BNET_EOD);
- break;
- }
+ bnet_fsend(dir, illegal_cmd);
+ bnet_sig(dir, BNET_EOD);
+ break;
+ }
Dmsg1(100, "Executing %s command.\n", cmds[i].cmd);
- if (!cmds[i].func(jcr)) { /* do command */
- quit = true; /* error or fully terminated, get out */
+ if (!cmds[i].func(jcr)) { /* do command */
+ quit = true; /* error or fully terminated, get out */
Dmsg0(20, "Quit command loop due to command error or Job done.\n");
- }
- break;
- }
+ }
+ break;
+ }
}
- if (!found) { /* command not found */
- bnet_fsend(dir, errmsg);
- quit = true;
- break;
+ if (!found) { /* command not found */
+ bnet_fsend(dir, errmsg);
+ quit = true;
+ break;
}
}
if (jcr->RunAfterJob && !job_canceled(jcr)) {
run_cmd(jcr, jcr->RunAfterJob, "ClientRunAfterJob");
}
+ dequeue_messages(jcr); /* send any queued messages */
/* Inform Director that we are done */
bnet_sig(dir, BNET_TERMINATE);
if (own_items) {
for (int i=0; i<num_items; i++) {
free(items[i]);
+ items[i] = NULL;
}
}
free(items);
+ items = NULL;
}
}
void grow_list(void);
public:
alist(int num = 1, bool own=true);
+ ~alist();
void init(int num = 1, bool own=true);
void append(void *item);
void prepend(void *item);
/* Constructor */
inline alist::alist(int num, bool own) {
- this->init(num, own);
+ init(num, own);
+}
+
+/* Destructor */
+inline alist::~alist() {
+ destroy();
}
{"autochanger", autochanger_cmd, 0},
{"release", release_cmd, 0},
{"readlabel", readlabel_cmd, 0},
- {NULL, NULL} /* list terminator */
+ {NULL, NULL} /* list terminator */
};
for (quit=0; !quit;) {
/* Read command */
if ((bnet_stat = bnet_recv(bs)) <= 0) {
- break; /* connection terminated */
+ break; /* connection terminated */
}
Dmsg1(9, "<dird: %s\n", bs->msg);
found = false;
for (i=0; cmds[i].cmd; i++) {
- if (strncmp(cmds[i].cmd, bs->msg, strlen(cmds[i].cmd)) == 0) {
- if ((!cmds[i].monitoraccess) && (jcr->director->monitor)) {
+ if (strncmp(cmds[i].cmd, bs->msg, strlen(cmds[i].cmd)) == 0) {
+ if ((!cmds[i].monitoraccess) && (jcr->director->monitor)) {
Dmsg1(100, "Command %s illegal.\n", cmds[i].cmd);
- bnet_fsend(bs, illegal_cmd);
- bnet_sig(bs, BNET_EOD);
- break;
- }
- if (!cmds[i].func(jcr)) { /* do command */
- quit = true; /* error, get out */
+ bnet_fsend(bs, illegal_cmd);
+ bnet_sig(bs, BNET_EOD);
+ break;
+ }
+ if (!cmds[i].func(jcr)) { /* do command */
+ quit = true; /* error, get out */
Dmsg1(90, "Command %s requsts quit\n", cmds[i].cmd);
- }
- found = true; /* indicate command found */
- break;
- }
+ }
+ found = true; /* indicate command found */
+ break;
+ }
}
if (!found) { /* command not found */
- bnet_fsend(bs, derrmsg);
- quit = true;
- break;
+ bnet_fsend(bs, derrmsg);
+ quit = true;
+ break;
}
}
+ dequeue_messages(jcr); /* send any queued messages */
bnet_sig(bs, BNET_TERMINATE);
free_jcr(jcr);
return NULL;
}
bnet_sig(fd, BNET_TERMINATE); /* signal to FD job is done */
jcr->end_time = time(NULL);
+ dequeue_messages(jcr); /* send any queued messages */
set_jcr_job_status(jcr, JS_Terminated);
bnet_fsend(dir, Job_end, jcr->Job, jcr->JobStatus, jcr->JobFiles,
edit_uint64(jcr->JobBytes, ec1));