[Bug 225584] Various compile process hang on Ryzen, but not on Intel
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Fri Feb 9 14:33:41 UTC 2018
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225584
--- Comment #69 from Konstantin Belousov <kib at FreeBSD.org> ---
(In reply to mike from comment #68)
Please try this, it should work and then it would be the last thing I am asking
to test.
diff --git a/lib/libc/stdio/_flock_stub.c b/lib/libc/stdio/_flock_stub.c
index 069ed64c4e9..816e958b1f0 100644
--- a/lib/libc/stdio/_flock_stub.c
+++ b/lib/libc/stdio/_flock_stub.c
@@ -39,12 +39,16 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <sys/types.h>
+#include <machine/cpufunc.h>
#include "namespace.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include "un-namespace.h"
+#include <signal.h>
+#include <unistd.h>
#include "local.h"
@@ -112,11 +116,17 @@ void
_funlockfile(FILE *fp)
{
pthread_t curthread = _pthread_self();
+ pthread_t owner;
/*
* Check if this file is owned by the current thread:
*/
- if (fp->_fl_owner == curthread) {
+ owner = fp->_fl_owner;
+ if (owner == NULL) {
+ mfence();
+ owner = fp->_fl_owner;
+ }
+ if (owner == curthread) {
/*
* Check if this thread has locked the FILE
* more than once:
@@ -138,4 +148,11 @@ _funlockfile(FILE *fp)
_pthread_mutex_unlock(&fp->_fl_mutex);
}
}
+ else {
+ char x[120];
+ snprintf(x, sizeof(x), "funlockfile %p %p %p %p\n", fp,
+ curthread, owner, fp->_fl_owner);
+ write(2, x, strlen(x));
+ raise(SIGBUS);
+ }
}
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-bugs
mailing list