#endif
static int separate_path_and_file(JCR *jcr, char *fname, char *ofile);
-static int path_already_seen(char *path, int pnl);
+static int path_already_seen(JCR *jcr, char *path, int pnl);
/*
savechr = attr->ofname[pnl];
attr->ofname[pnl] = 0; /* terminate path */
- if (!path_already_seen(attr->ofname, pnl)) {
+ if (!path_already_seen(jcr, attr->ofname, pnl)) {
Dmsg1(50, "Make path %s\n", attr->ofname);
/*
* If we need to make the directory, ensure that it is with
mode |= O_CTG; /* set contiguous bit if needed */
}
Dmsg1(50, "Create file: %s\n", attr->ofname);
+ if (is_bopen(bfd)) {
+ Jmsg1(jcr, M_ERROR, 0, "bpkt already open fid=%d\n", bfd->fid);
+ }
if ((bopen(bfd, attr->ofname, mode, S_IRUSR | S_IWUSR)) < 0) {
- Jmsg2(jcr, M_ERROR, 0, _("Could not create %s: %d ERR=%s\n"),
+ Jmsg2(jcr, M_ERROR, 0, _("Could not create %s: ERR=%s\n"),
attr->ofname, berror(bfd));
-
return CF_ERROR;
}
return CF_EXTRACT;
} else {
tid = NULL;
}
+ if (is_bopen(bfd)) {
+ Jmsg1(jcr, M_ERROR, 0, "bpkt already open fid=%d\n", bfd->fid);
+ }
if ((bopen(bfd, attr->ofname, mode, 0)) < 0) {
Jmsg2(jcr, M_ERROR, 0, _("Could not open %s: ERR=%s\n"),
attr->ofname, berror(bfd));
* and saved.
*/
if (!is_portable_backup(bfd)) {
+ if (is_bopen(bfd)) {
+ Jmsg1(jcr, M_ERROR, 0, "bpkt already open fid=%d\n", bfd->fid);
+ }
if ((bopen(bfd, attr->ofname, O_WRONLY|O_BINARY, 0)) < 0) {
Jmsg2(jcr, M_ERROR, 0, _("Could not open %s: ERR=%s\n"),
attr->ofname, berror(bfd));
return pnl;
}
-static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
-
/*
* Primitive caching of path to prevent recreating a pathname
* each time as long as we remain in the same directory.
*/
-static int path_already_seen(char *path, int pnl)
+static int path_already_seen(JCR *jcr, char *path, int pnl)
{
- static int cached_pnl = 0;
- static char cached_path[1000];
-
- P(mutex);
- if (cached_pnl == pnl && strcmp(path, cached_path) == 0) {
- V(mutex);
- return 1;
+ if (!jcr->cached_path) {
+ jcr->cached_path = get_pool_memory(PM_FNAME);
}
- if (pnl < (int)(sizeof(cached_path)-1)) {
- strcpy(cached_path, path);
- cached_pnl = pnl;
+ if (jcr->cached_pnl == pnl && strcmp(path, jcr->cached_path) == 0) {
+ return 1;
}
- V(mutex);
+ pm_strcpy(&jcr->cached_path, path);
+ jcr->cached_pnl = pnl;
return 0;
}