From b08976456c8ab7f29efd83644ce42746c0d6501b Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 27 Jun 2019 12:16:21 +0100 Subject: pigz: Add debug for autobuilder errors Signed-off-by: Richard Purdie --- meta/classes/package.bbclass | 2 +- meta/recipes-extended/pigz/pigz/debug.patch | 190 ++++++++++++++++++++++++++++ meta/recipes-extended/pigz/pigz_2.4.bb | 2 +- 3 files changed, 192 insertions(+), 2 deletions(-) create mode 100644 meta/recipes-extended/pigz/pigz/debug.patch diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass index cd223a121e..70babb3812 100644 --- a/meta/classes/package.bbclass +++ b/meta/classes/package.bbclass @@ -237,7 +237,7 @@ def do_split_packages(d, root, file_regex, output_pattern, description, postinst d.setVar('PACKAGES', ' '.join(packages)) return list(split_packages) -PACKAGE_DEPENDS += "file-native" +PACKAGE_DEPENDS += "file-native pigz-native" python () { if d.getVar('PACKAGES') != '': diff --git a/meta/recipes-extended/pigz/pigz/debug.patch b/meta/recipes-extended/pigz/pigz/debug.patch new file mode 100644 index 0000000000..83ab84bab0 --- /dev/null +++ b/meta/recipes-extended/pigz/pigz/debug.patch @@ -0,0 +1,190 @@ +Index: pigz-2.4/pigz.c +=================================================================== +--- pigz-2.4.orig/pigz.c ++++ pigz-2.4/pigz.c +@@ -4293,8 +4293,8 @@ local int option(char *arg) { + + #ifndef NOTHREAD + // handle error received from yarn function +-local void cut_yarn(int err) { +- throw(err, err == ENOMEM ? "not enough memory" : "internal threads error"); ++local void cut_yarn(int err, int loc) { ++ throw(err, err == ENOMEM ? "not enough memory (%d, %d)" : "internal threads error (%d, %d)", err, loc); + } + #endif + +Index: pigz-2.4/yarn.c +=================================================================== +--- pigz-2.4.orig/yarn.c ++++ pigz-2.4/yarn.c +@@ -50,14 +50,14 @@ + + /* error handling external globals, resettable by application */ + char *yarn_prefix = "yarn"; +-void (*yarn_abort)(int) = NULL; ++void (*yarn_abort)(int, int) = NULL; + + + /* immediately exit -- use for errors that shouldn't ever happen */ +-local void fail(int err) ++local void fail(int err, int loc) + { + if (yarn_abort != NULL) +- yarn_abort(err); ++ yarn_abort(err, loc); + fprintf(stderr, "%s: %s (%d) -- aborting\n", yarn_prefix, + err == ENOMEM ? "out of memory" : "internal pthread error", err); + exit(err == ENOMEM || err == EAGAIN ? err : EINVAL); +@@ -83,7 +83,7 @@ local void *my_malloc(size_t size) + void *block; + + if ((block = my_malloc_f(size)) == NULL) +- fail(ENOMEM); ++ fail(ENOMEM, 1); + return block; + } + +@@ -103,7 +103,7 @@ lock *new_lock(long initial) + bolt = my_malloc(sizeof(struct lock_s)); + if ((ret = pthread_mutex_init(&(bolt->mutex), NULL)) || + (ret = pthread_cond_init(&(bolt->cond), NULL))) +- fail(ret); ++ fail(ret, 2); + bolt->value = initial; + return bolt; + } +@@ -113,7 +113,7 @@ void possess(lock *bolt) + int ret; + + if ((ret = pthread_mutex_lock(&(bolt->mutex))) != 0) +- fail(ret); ++ fail(ret, 3); + } + + void release(lock *bolt) +@@ -121,7 +121,7 @@ void release(lock *bolt) + int ret; + + if ((ret = pthread_mutex_unlock(&(bolt->mutex))) != 0) +- fail(ret); ++ fail(ret, 4); + } + + void twist(lock *bolt, enum twist_op op, long val) +@@ -134,7 +134,7 @@ void twist(lock *bolt, enum twist_op op, + bolt->value += val; + if ((ret = pthread_cond_broadcast(&(bolt->cond))) || + (ret = pthread_mutex_unlock(&(bolt->mutex)))) +- fail(ret); ++ fail(ret, 5); + } + + #define until(a) while(!(a)) +@@ -147,22 +147,22 @@ void wait_for(lock *bolt, enum wait_op o + case TO_BE: + until (bolt->value == val) + if ((ret = pthread_cond_wait(&(bolt->cond), &(bolt->mutex))) != 0) +- fail(ret); ++ fail(ret, 6); + break; + case NOT_TO_BE: + until (bolt->value != val) + if ((ret = pthread_cond_wait(&(bolt->cond), &(bolt->mutex))) != 0) +- fail(ret); ++ fail(ret, 7); + break; + case TO_BE_MORE_THAN: + until (bolt->value > val) + if ((ret = pthread_cond_wait(&(bolt->cond), &(bolt->mutex))) != 0) +- fail(ret); ++ fail(ret, 8); + break; + case TO_BE_LESS_THAN: + until (bolt->value < val) + if ((ret = pthread_cond_wait(&(bolt->cond), &(bolt->mutex))) != 0) +- fail(ret); ++ fail(ret, 9); + } + } + +@@ -179,7 +179,7 @@ void free_lock(lock *bolt) + return; + if ((ret = pthread_cond_destroy(&(bolt->cond))) || + (ret = pthread_mutex_destroy(&(bolt->mutex)))) +- fail(ret); ++ fail(ret, 10); + my_free(bolt); + } + +@@ -224,7 +224,7 @@ local void reenter(void *dummy) + prior = &(match->next); + } + if (match == NULL) +- fail(EINVAL); ++ fail(EINVAL, 11); + + /* mark this thread as done and move it to the head of the list */ + match->done = 1; +@@ -287,7 +287,7 @@ thread *launch(void (*probe)(void *), vo + (ret = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE)) || + (ret = pthread_create(&(th->id), &attr, ignition, capsule)) || + (ret = pthread_attr_destroy(&attr))) +- fail(ret); ++ fail(ret, 12); + + /* put the thread in the threads list for join_all() */ + th->done = 0; +@@ -304,7 +304,7 @@ void join(thread *ally) + + /* wait for thread to exit and return its resources */ + if ((ret = pthread_join(ally->id, NULL)) != 0) +- fail(ret); ++ fail(ret, 13); + + /* find the thread in the threads list */ + possess(&(threads_lock)); +@@ -315,7 +315,7 @@ void join(thread *ally) + prior = &(match->next); + } + if (match == NULL) +- fail(EINVAL); ++ fail(EINVAL, 14); + + /* remove thread from list and update exited count, free thread */ + if (match->done) +@@ -351,12 +351,12 @@ int join_all(void) + prior = &(match->next); + } + if (match == NULL) +- fail(EINVAL); ++ fail(EINVAL, 15); + + /* join the thread (will be almost immediate), remove from the threads + list, update the reenter count, and free the thread */ + if ((ret = pthread_join(match->id, NULL)) != 0) +- fail(ret); ++ fail(ret, 16); + threads_lock.value--; + *prior = match->next; + my_free(match); +@@ -375,6 +375,6 @@ void destruct(thread *off_course) + int ret; + + if ((ret = pthread_cancel(off_course->id)) != 0) +- fail(ret); ++ fail(ret, 17); + join(off_course); + } +Index: pigz-2.4/yarn.h +=================================================================== +--- pigz-2.4.orig/yarn.h ++++ pigz-2.4/yarn.h +@@ -110,7 +110,7 @@ + */ + + extern char *yarn_prefix; +-extern void (*yarn_abort)(int); ++extern void (*yarn_abort)(int, int); + + void yarn_mem(void *(*)(size_t), void (*)(void *)); + diff --git a/meta/recipes-extended/pigz/pigz_2.4.bb b/meta/recipes-extended/pigz/pigz_2.4.bb index 8c65ec34f0..7bb5b64c6b 100644 --- a/meta/recipes-extended/pigz/pigz_2.4.bb +++ b/meta/recipes-extended/pigz/pigz_2.4.bb @@ -8,7 +8,7 @@ SECTION = "console/utils" LICENSE = "Zlib & Apache-2.0" LIC_FILES_CHKSUM = "file://pigz.c;md5=9ae6dee8ceba9610596ed0ada493d142;beginline=7;endline=21" -SRC_URI = "http://zlib.net/${BPN}/fossils/${BP}.tar.gz" +SRC_URI = "http://zlib.net/${BPN}/fossils/${BP}.tar.gz file://debug.patch" SRC_URI[md5sum] = "def2f6e19d9d8231445adc1349d346df" SRC_URI[sha256sum] = "a4f816222a7b4269bd232680590b579ccc72591f1bb5adafcd7208ca77e14f73" PROVIDES_class-native += "gzip-native" -- cgit 1.2.3-korg