Fix concurrency issues in pkgdb: only allow 1 write transaction at the same time.
This implementation relies on a POSIX named semaphore, which is also required by xbps-rindex(8).
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
/*-
|
||||
* Copyright (c) 2013 Juan Romero Pardines.
|
||||
* Copyright (c) 2013-2014 Juan Romero Pardines.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -146,12 +146,17 @@ main(int argc, char **argv)
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if ((rv = xbps_pkgdb_lock(&xh)) != 0) {
|
||||
fprintf(stderr, "failed to lock pkgdb: %s\n", strerror(rv));
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
if (update_format)
|
||||
convert_pkgdb_format(&xh);
|
||||
else if (instmode) {
|
||||
if (argc == optind) {
|
||||
fprintf(stderr,
|
||||
"xbps-pkgdb: missing PKGNAME argument\n");
|
||||
xbps_pkgdb_unlock(&xh);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
for (i = optind; i < argc; i++) {
|
||||
@ -160,6 +165,7 @@ main(int argc, char **argv)
|
||||
fprintf(stderr, "xbps-pkgdb: failed to "
|
||||
"change to %s mode to %s: %s\n",
|
||||
instmode, argv[i], strerror(rv));
|
||||
xbps_pkgdb_unlock(&xh);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
@ -174,5 +180,6 @@ main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
xbps_pkgdb_unlock(&xh);
|
||||
exit(rv ? EXIT_FAILURE : EXIT_SUCCESS);
|
||||
}
|
||||
|
Reference in New Issue
Block a user