[Midnightbsd-cvs] src [7371] trunk/usr.sbin/mport: first pass at making this dispatch safe
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Sat Nov 28 19:47:41 EST 2015
Revision: 7371
http://svnweb.midnightbsd.org/src/?rev=7371
Author: laffer1
Date: 2015-11-28 19:47:41 -0500 (Sat, 28 Nov 2015)
Log Message:
-----------
first pass at making this dispatch safe
Modified Paths:
--------------
trunk/usr.sbin/mport/Makefile
trunk/usr.sbin/mport/mport.c
Modified: trunk/usr.sbin/mport/Makefile
===================================================================
--- trunk/usr.sbin/mport/Makefile 2015-11-29 00:47:27 UTC (rev 7370)
+++ trunk/usr.sbin/mport/Makefile 2015-11-29 00:47:41 UTC (rev 7371)
@@ -2,7 +2,7 @@
PROG= mport
-CFLAGS= -I${.CURDIR}/../../lib/libmport/ -g
+CFLAGS= -I${.CURDIR}/../../lib/libmport/ -fblocks -g
DPADD= ${LIBMPORT}
LDADD= -lmport
Modified: trunk/usr.sbin/mport/mport.c
===================================================================
--- trunk/usr.sbin/mport/mport.c 2015-11-29 00:47:27 UTC (rev 7370)
+++ trunk/usr.sbin/mport/mport.c 2015-11-29 00:47:41 UTC (rev 7371)
@@ -62,22 +62,28 @@
int
main(int argc, char *argv[]) {
char *flag = NULL, *buf = NULL;
- mportInstance *mport;
- int resultCode = MPORT_ERR_FATAL;
- int tempResultCode;
- int i;
- char **searchQuery;
+ __block mportInstance *mport;
+ __block int resultCode = MPORT_ERR_FATAL;
+ __block int tempResultCode;
+ __block int i;
+ __block char **searchQuery;
if (argc < 2)
usage();
+ dispatch_queue_t mainq = dispatch_get_main_queue();
+ dispatch_group_t grp = dispatch_group_create();
+ dispatch_queue_t q = dispatch_queue_create("org.midnightbsd.mport.q", NULL);
mport = mport_instance_new();
- if (mport_instance_init(mport, NULL) != MPORT_OK) {
- errx(1, "%s", mport_err_string());
- }
+ dispatch_group_async(grp, q, ^{
+ if (mport_instance_init(mport, NULL) != MPORT_OK) {
+ errx(1, "%s", mport_err_string());
+ }
+ });
if (!strcmp(argv[1], "install")) {
+ dispatch_group_async(grp, q, ^{
if (argc == 2) {
mport_instance_free(mport);
usage();
@@ -84,7 +90,9 @@
}
loadIndex(mport);
resultCode = install(mport, argv[2]);
+ });
} else if (!strcmp(argv[1], "delete")) {
+ dispatch_group_async(grp, q, ^{
if (argc == 2) {
mport_instance_free(mport);
usage();
@@ -94,7 +102,9 @@
if (tempResultCode != 0)
resultCode = tempResultCode;
}
+ });
} else if (!strcmp(argv[1], "update")) {
+ dispatch_group_async(grp, q, ^{
if (argc == 2) {
mport_instance_free(mport);
usage();
@@ -105,7 +115,9 @@
if (tempResultCode != 0)
resultCode = tempResultCode;
}
+ });
} else if (!strcmp(argv[1], "download")) {
+ dispatch_group_async(grp, q, ^{
loadIndex(mport);
for (i = 2; i < argc; i++) {
tempResultCode = download(mport, argv[2]);
@@ -112,9 +124,12 @@
if (tempResultCode != 0)
resultCode = tempResultCode;
}
+ });
} else if (!strcmp(argv[1], "upgrade")) {
+ dispatch_group_async(grp, q, ^{
loadIndex(mport);
resultCode = upgrade(mport);
+ });
} else if (!strcmp(argv[1], "locks")) {
asprintf(&buf, "%s%s", MPORT_TOOLS_PATH, "mport.list");
flag = strdup("-l");
@@ -122,17 +137,21 @@
free(flag);
free(buf);
} else if (!strcmp(argv[1], "lock")) {
+ dispatch_group_async(grp, q, ^{
if (argc > 2) {
lock(mport, argv[2]);
} else {
usage();
}
+ });
} else if (!strcmp(argv[1], "unlock")) {
+ dispatch_group_async(grp, q, ^{
if (argc > 2) {
unlock(mport, argv[2]);
} else {
usage();
}
+ });
} else if (!strcmp(argv[1], "list")) {
asprintf(&buf, "%s%s", MPORT_TOOLS_PATH, "mport.list");
if (argc > 2) {
@@ -151,9 +170,12 @@
free(flag);
free(buf);
} else if (!strcmp(argv[1], "info")) {
+ dispatch_group_async(grp, q, ^{
loadIndex(mport);
resultCode = info(mport, argv[2]);
+ });
} else if (!strcmp(argv[1], "search")) {
+ dispatch_group_async(grp, q, ^{
loadIndex(mport);
searchQuery = calloc(argc - 1, sizeof(char*));
for (i = 2; i < argc; i++) {
@@ -164,24 +186,40 @@
free(searchQuery[i-2]);
}
free(searchQuery);
+ });
} else if (!strcmp(argv[1], "stats")) {
+ dispatch_group_async(grp, q, ^{
loadIndex(mport);
resultCode = stats(mport);
+ });
} else if (!strcmp(argv[1], "clean")) {
+ dispatch_group_async(grp, q, ^{
resultCode = clean(mport);
+ });
} else if (!strcmp(argv[1], "cpe")) {
+ dispatch_group_async(grp, q, ^{
resultCode = cpeList(mport);
+ });
} else if (!strcmp(argv[1], "deleteall")) {
+ dispatch_group_async(grp, q, ^{
resultCode = deleteAll(mport);
+ });
} else if (!strcmp(argv[1], "verify")) {
+ dispatch_group_async(grp, q, ^{
resultCode = verify(mport);
+ });
} else {
mport_instance_free(mport);
usage();
}
- mport_instance_free(mport);
- return (resultCode);
+ dispatch_group_wait(grp, DISPATCH_TIME_FOREVER);
+ dispatch_async(mainq, ^{
+ mport_instance_free(mport);
+ exit(resultCode);
+ });
+
+ dispatch_main();
}
void
More information about the Midnightbsd-cvs
mailing list