time(&start);
while (((res = link(fs, s)) < 0) && (errno == EEXIST) && (time(NULL) - start < 5))
usleep(1);
+
+ unlink(fs);
+
if (res) {
ast_log(LOG_WARNING, "Failed to lock path '%s': %s\n", path, strerror(errno));
return AST_LOCK_TIMEOUT;
} else {
- unlink(fs);
ast_log(LOG_DEBUG, "Locked path '%s'\n", path);
return AST_LOCK_SUCCESS;
}
int ast_unlock_path(const char *path)
{
char *s;
+ int res;
+
s = alloca(strlen(path) + 10);
- if (!s)
+ if (!s) {
+ ast_log(LOG_WARNING, "Out of memory!\n");
return -1;
+ }
+
snprintf(s, strlen(path) + 9, "%s/%s", path, ".lock");
- ast_log(LOG_DEBUG, "Unlocked path '%s'\n", path);
- return unlink(s);
+
+ if ((res = unlink(s)))
+ ast_log(LOG_ERROR, "Could not unlock path '%s': %s\n", path, strerror(errno));
+ else
+ ast_log(LOG_DEBUG, "Unlocked path '%s'\n", path);
+
+ return res;
}
int ast_record_review(struct ast_channel *chan, const char *playfile, const char *recordfile, int maxtime, const char *fmt, int *duration, const char *path)
} else if (ast_fileexists(tmptxtfile, NULL, NULL) <= 0) {
if (option_debug)
ast_log(LOG_DEBUG, "The recorded media file is gone, so we should remove the .txt file too!\n");
- unlink(tmptxtfile);
+ unlink(tmptxtfile);
+ ast_unlock_path(dir);
} else {
for (;;) {
make_file(fn, sizeof(fn), dir, msgnum);
static char language[MAX_LANGUAGE] = "";
static char regcontext[AST_MAX_CONTEXT] = "";
+static int maxauthreq = 0;
static int max_retries = 4;
static int ping_time = 20;
static int lagrq_time = 10;
if (user) {
memset(user, 0, sizeof(struct iax2_user));
+ user->maxauthreq = maxauthreq;
user->curauthreq = oldcurauthreq;
user->prefs = prefs;
user->capability = iax2_capability;
}
} else if (!strcasecmp(v->name, "language")) {
ast_copy_string(language, v->value, sizeof(language));
+ } else if (!strcasecmp(v->name, "maxauthreq")) {
+ maxauthreq = atoi(v->value);
+ if (maxauthreq < 0)
+ maxauthreq = 0;
} /*else if (strcasecmp(v->name,"type")) */
/* ast_log(LOG_WARNING, "Ignoring %s\n", v->name); */
v = v->next;