]> Cypherpunks.ru repositories - gostls13.git/blobdiff - src/runtime/asm_386.s
Revert "runtime/cgo: store M for C-created thread in pthread key"
[gostls13.git] / src / runtime / asm_386.s
index 5fd0ab9817c03cf37b08df6244edf696922770a2..febe27089fcb4fd1cdc4b3140b45ee67d360dabc 100644 (file)
@@ -689,20 +689,7 @@ nosave:
 TEXT ·cgocallback(SB),NOSPLIT,$12-12  // Frame size must match commented places below
        NO_LOCAL_POINTERS
 
-       // Skip cgocallbackg, just dropm when fn is nil, and frame is the saved g.
-       // It is used to dropm while thread is exiting.
-       MOVL    fn+0(FP), AX
-       CMPL    AX, $0
-       JNE     loadg
-       // Restore the g from frame.
-       get_tls(CX)
-       MOVL    frame+4(FP), BX
-       MOVL    BX, g(CX)
-       JMP     dropm
-
-loadg:
-       // If g is nil, Go did not create the current thread,
-       // or if this thread never called into Go on pthread platforms.
+       // If g is nil, Go did not create the current thread.
        // Call needm to obtain one for temporary use.
        // In this case, we're running on the thread stack, so there's
        // lots of space, but the linker doesn't know. Hide the call from
@@ -720,9 +707,9 @@ loadg:
        MOVL    BP, savedm-4(SP) // saved copy of oldm
        JMP     havem
 needm:
-       MOVL    $runtime·needAndBindM(SB), AX
+       MOVL    $runtime·needm(SB), AX
        CALL    AX
-       MOVL    $0, savedm-4(SP)
+       MOVL    $0, savedm-4(SP) // dropm on return
        get_tls(CX)
        MOVL    g(CX), BP
        MOVL    g_m(BP), BP
@@ -797,29 +784,13 @@ havem:
        MOVL    0(SP), AX
        MOVL    AX, (g_sched+gobuf_sp)(SI)
 
-       // If the m on entry was nil, we called needm above to borrow an m,
-       // 1. for the duration of the call on non-pthread platforms,
-       // 2. or the duration of the C thread alive on pthread platforms.
-       // If the m on entry wasn't nil,
-       // 1. the thread might be a Go thread,
-       // 2. or it's wasn't the first call from a C thread on pthread platforms,
-       //    since the we skip dropm to resue the m in the first call.
+       // If the m on entry was nil, we called needm above to borrow an m
+       // for the duration of the call. Since the call is over, return it with dropm.
        MOVL    savedm-4(SP), DX
        CMPL    DX, $0
-       JNE     droppedm
-
-       // Skip dropm to reuse it in the next call, when a pthread key has been created.
-       MOVL    _cgo_pthread_key_created(SB), DX
-       // It means cgo is disabled when _cgo_pthread_key_created is a nil pointer, need dropm.
-       CMPL    DX, $0
-       JEQ     dropm
-       CMPL    (DX), $0
-       JNE     droppedm
-
-dropm:
+       JNE 3(PC)
        MOVL    $runtime·dropm(SB), AX
        CALL    AX
-droppedm:
 
        // Done!
        RET