|
|
e733e87 |
The thread start routine must return void *, and int and void *
|
|
|
e733e87 |
are distinct types. Compilers increasingly issue errors instead
|
|
|
e733e87 |
of warnings for such type errors, and this causes the configure
|
|
|
e733e87 |
probe to fail unconditionally, even if the system supports
|
|
|
e733e87 |
__thread variables.
|
|
|
e733e87 |
|
|
|
e733e87 |
Submitted upstream: <https://github.com/mono/mono/pull/21730>
|
|
|
e733e87 |
|
|
|
e733e87 |
diff --git a/configure.ac b/configure.ac
|
|
|
e733e87 |
index bbbd1622d9728859..5a3a5770c8a3cdb6 100644
|
|
|
e733e87 |
--- a/configure.ac
|
|
|
e733e87 |
+++ b/configure.ac
|
|
|
e733e87 |
@@ -2833,14 +2833,16 @@ if test x$host_win32 = xno; then
|
|
|
e733e87 |
__thread int i;
|
|
|
e733e87 |
static int res1, res2;
|
|
|
e733e87 |
|
|
|
e733e87 |
- void thread_main (void *arg)
|
|
|
e733e87 |
+ void *thread_main (void *parg)
|
|
|
e733e87 |
{
|
|
|
e733e87 |
+ int arg = *(int *)parg;
|
|
|
e733e87 |
i = arg;
|
|
|
e733e87 |
sleep (1);
|
|
|
e733e87 |
if (arg == 1)
|
|
|
e733e87 |
res1 = (i == arg);
|
|
|
e733e87 |
else
|
|
|
e733e87 |
res2 = (i == arg);
|
|
|
e733e87 |
+ return NULL;
|
|
|
e733e87 |
}
|
|
|
e733e87 |
|
|
|
e733e87 |
int main () {
|
|
|
e733e87 |
@@ -2848,8 +2850,10 @@ if test x$host_win32 = xno; then
|
|
|
e733e87 |
|
|
|
e733e87 |
i = 5;
|
|
|
e733e87 |
|
|
|
e733e87 |
- pthread_create (&t1, NULL, thread_main, 1);
|
|
|
e733e87 |
- pthread_create (&t2, NULL, thread_main, 2);
|
|
|
e733e87 |
+ int one = 1;
|
|
|
e733e87 |
+ pthread_create (&t1, NULL, thread_main, &one);
|
|
|
e733e87 |
+ int two = 2;
|
|
|
e733e87 |
+ pthread_create (&t2, NULL, thread_main, &two);
|
|
|
e733e87 |
|
|
|
e733e87 |
pthread_join (t1, NULL);
|
|
|
e733e87 |
pthread_join (t2, NULL);
|
|
|
e733e87 |
--- a/configure 2023-06-14 17:18:48.000000000 +0200
|
|
|
e733e87 |
+++ b/configure 2023-12-09 10:41:58.001084368 +0100
|
|
|
e733e87 |
@@ -24906,14 +24894,16 @@
|
|
|
e733e87 |
__thread int i;
|
|
|
e733e87 |
static int res1, res2;
|
|
|
e733e87 |
|
|
|
e733e87 |
- void thread_main (void *arg)
|
|
|
e733e87 |
+ void *thread_main (void *parg)
|
|
|
e733e87 |
{
|
|
|
e733e87 |
+ int arg = *(int *)parg;
|
|
|
e733e87 |
i = arg;
|
|
|
e733e87 |
sleep (1);
|
|
|
e733e87 |
if (arg == 1)
|
|
|
e733e87 |
res1 = (i == arg);
|
|
|
e733e87 |
else
|
|
|
e733e87 |
res2 = (i == arg);
|
|
|
e733e87 |
+ return NULL;
|
|
|
e733e87 |
}
|
|
|
e733e87 |
|
|
|
e733e87 |
int main () {
|
|
|
e733e87 |
@@ -24921,8 +24911,10 @@
|
|
|
e733e87 |
|
|
|
e733e87 |
i = 5;
|
|
|
e733e87 |
|
|
|
e733e87 |
- pthread_create (&t1, NULL, thread_main, 1);
|
|
|
e733e87 |
- pthread_create (&t2, NULL, thread_main, 2);
|
|
|
e733e87 |
+ int one = 1;
|
|
|
e733e87 |
+ pthread_create (&t1, NULL, thread_main, &one);
|
|
|
e733e87 |
+ int two = 2;
|
|
|
e733e87 |
+ pthread_create (&t2, NULL, thread_main, &two);
|
|
|
e733e87 |
|
|
|
e733e87 |
pthread_join (t1, NULL);
|
|
|
e733e87 |
pthread_join (t2, NULL);
|