8
8
#define _GNU_SOURCE
9
9
#endif
10
10
11
+ #include <errno.h>
12
+ #include <string.h>
11
13
#include <pthread.h>
12
14
#include "libcgo.h"
13
15
@@ -20,16 +22,21 @@ x_cgo_getstackbound(uintptr bounds[2])
20
22
21
23
// Needed before pthread_getattr_np, too, since before glibc 2.32
22
24
// it did not call pthread_attr_init in all cases (see #65625).
23
- pthread_attr_init (& attr );
25
+ if (pthread_attr_init (& attr ) != 0 )
26
+ fatalf ("pthread_attr_init failed: %s" , strerror (errno ));
24
27
#if defined(__GLIBC__ ) || defined(__BIONIC__ ) || (defined(__sun ) && !defined(__illumos__ ))
25
28
// pthread_getattr_np is a GNU extension supported in glibc.
26
29
// Solaris is not glibc but does support pthread_getattr_np
27
30
// (and the fallback doesn't work...). Illumos does not.
28
- pthread_getattr_np (pthread_self (), & attr ); // GNU extension
29
- pthread_attr_getstack (& attr , & addr , & size ); // low address
31
+ if (pthread_getattr_np (pthread_self (), & attr ) != 0 ) // GNU extension
32
+ fatalf ("pthread_getattr_np failed: %s" , strerror (errno ));
33
+ if (pthread_attr_getstack (& attr , & addr , & size ) != 0 ) // low address
34
+ fatalf ("pthread_attr_getstack failed: %s" , strerror (errno ));
30
35
#elif defined(__illumos__ )
31
- pthread_attr_get_np (pthread_self (), & attr );
32
- pthread_attr_getstack (& attr , & addr , & size ); // low address
36
+ if (pthread_attr_get_np (pthread_self (), & attr ) != 0 ) // Solaris extension
37
+ fatalf ("pthread_attr_get_np failed: %s" , strerror (errno ));
38
+ if (pthread_attr_getstack (& attr , & addr , & size ) != 0 ) // low address
39
+ fatalf ("pthread_attr_getstack failed: %s" , strerror (errno ));
33
40
#else
34
41
// We don't know how to get the current stacks, leave it as
35
42
// 0 and the caller will use an estimate based on the current
0 commit comments