]> Cypherpunks repositories - gostls13.git/commitdiff
runtime/cgo: make code robust
authorHiroshi Ioka <hirochachacha@gmail.com>
Tue, 11 Jul 2017 09:57:54 +0000 (18:57 +0900)
committerIan Lance Taylor <iant@golang.org>
Fri, 11 Aug 2017 18:51:24 +0000 (18:51 +0000)
According to http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_key_create.html,
pthread_key_create return an error number which is greater than or equal
to 0. I don't know the scenario that pthread_setspecific would fail, but
also don't know the future. Add some error handlings just in case.

Change-Id: I0774b79ef658d67e300f4a9aab1f2e3879acc7ee
Reviewed-on: https://go-review.googlesource.com/54811
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/runtime/cgo/gcc_android_386.c
src/runtime/cgo/gcc_android_amd64.c
src/runtime/cgo/gcc_darwin_386.c
src/runtime/cgo/gcc_darwin_amd64.c

index 23a15f1c87e0f4de221481a3b23b98a5b9932836..28f553c4463ee691a160365d7edb1e597149f0aa 100644 (file)
@@ -36,7 +36,7 @@ inittls(void)
         */
        ntofree = 0;
        for(;;) {
-               if(pthread_key_create(&k, nil) < 0) {
+               if(pthread_key_create(&k, nil) != 0) {
                        fprintf(stderr, "runtime/cgo: pthread_key_create failed\n");
                        abort();
                }
@@ -77,7 +77,10 @@ threadentry(void *v)
        ts = *(ThreadStart*)v;
        free(v);
 
-       pthread_setspecific(k1, (void*)ts.g);
+       if (pthread_setspecific(k1, (void*)ts.g) != 0) {
+               fprintf(stderr, "runtime/cgo: pthread_setspecific failed\n");
+               abort();
+       }
 
        crosscall_386(ts.fn);
        return nil;
index e006c49bcf5e718d132604c86faf63c5902a4ac9..6f92d90dd4cb4e47d8f56dbc5be77e0728909a2b 100644 (file)
@@ -41,7 +41,7 @@ inittls(void)
         */
        ntofree = 0;
        for(;;) {
-               if(pthread_key_create(&k, nil) < 0) {
+               if(pthread_key_create(&k, nil) != 0) {
                        fprintf(stderr, "runtime/cgo: pthread_key_create failed\n");
                        abort();
                }
@@ -82,7 +82,10 @@ threadentry(void *v)
        ts = *(ThreadStart*)v;
        free(v);
 
-       pthread_setspecific(k1, (void*)ts.g);
+       if (pthread_setspecific(k1, (void*)ts.g) != 0) {
+               fprintf(stderr, "runtime/cgo: pthread_setspecific failed\n");
+               abort();
+       }
 
        crosscall_amd64(ts.fn);
        return nil;
index 9d1b942575529c194a93ad723fe1f673bceba7ea..7d3c55cd56e423bd15cbb6c5d61ab9edb21ca592 100644 (file)
@@ -64,7 +64,7 @@ inittls(void)
         */
        ntofree = 0;
        for(;;) {
-               if(pthread_key_create(&k, nil) < 0) {
+               if(pthread_key_create(&k, nil) != 0) {
                        fprintf(stderr, "runtime/cgo: pthread_key_create failed\n");
                        abort();
                }
@@ -142,7 +142,10 @@ threadentry(void *v)
        ts = *(ThreadStart*)v;
        free(v);
 
-       pthread_setspecific(k1, (void*)ts.g);
+       if (pthread_setspecific(k1, (void*)ts.g) != 0) {
+               fprintf(stderr, "runtime/cgo: pthread_setspecific failed\n");
+               abort();
+       }
 
        crosscall_386(ts.fn);
        return nil;
index 9c2de6b2cd70fc9ad3fe9dd9262c8f27a9faa26b..c57608c6757649014cb2797a7ec8f6b2330fc2eb 100644 (file)
@@ -35,7 +35,7 @@ inittls(void)
         */
        ntofree = 0;
        for(;;) {
-               if(pthread_key_create(&k, nil) < 0) {
+               if(pthread_key_create(&k, nil) != 0) {
                        fprintf(stderr, "runtime/cgo: pthread_key_create failed\n");
                        abort();
                }
@@ -113,7 +113,10 @@ threadentry(void *v)
        ts = *(ThreadStart*)v;
        free(v);
 
-       pthread_setspecific(k1, (void*)ts.g);
+       if (pthread_setspecific(k1, (void*)ts.g) != 0) {
+               fprintf(stderr, "runtime/cgo: pthread_setspecific failed\n");
+               abort();
+       }
 
        crosscall_amd64(ts.fn);
        return nil;