slidge-whatsapp 0.2.7__cp311-cp311-manylinux_2_36_aarch64.whl → 0.3.0b0__cp311-cp311-manylinux_2_36_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of slidge-whatsapp might be problematic. Click here for more details.

Files changed (212) hide show
  1. slidge_whatsapp/contact.py +13 -3
  2. slidge_whatsapp/event.go +107 -37
  3. slidge_whatsapp/gateway.go +7 -63
  4. slidge_whatsapp/gateway.py +2 -3
  5. slidge_whatsapp/generated/_whatsapp.cpython-311-aarch64-linux-gnu.h +175 -158
  6. slidge_whatsapp/generated/_whatsapp.cpython-311-aarch64-linux-gnu.so +0 -0
  7. slidge_whatsapp/generated/build.py +135 -121
  8. slidge_whatsapp/generated/whatsapp.c +1699 -1427
  9. slidge_whatsapp/generated/whatsapp.go +846 -735
  10. slidge_whatsapp/generated/whatsapp.py +1216 -1091
  11. slidge_whatsapp/generated/whatsapp_go.h +175 -158
  12. slidge_whatsapp/go.mod +18 -15
  13. slidge_whatsapp/go.sum +38 -26
  14. slidge_whatsapp/group.py +34 -30
  15. slidge_whatsapp/media/media.go +1 -1
  16. slidge_whatsapp/session.go +33 -16
  17. slidge_whatsapp/session.py +46 -14
  18. slidge_whatsapp/vendor/github.com/beeper/argo-go/LICENSE +9 -0
  19. slidge_whatsapp/vendor/github.com/beeper/argo-go/block/blockreader.go +329 -0
  20. slidge_whatsapp/vendor/github.com/beeper/argo-go/block/blockwriter.go +417 -0
  21. slidge_whatsapp/vendor/github.com/beeper/argo-go/codec/decoder.go +652 -0
  22. slidge_whatsapp/vendor/github.com/beeper/argo-go/codec/encoder.go +985 -0
  23. slidge_whatsapp/vendor/github.com/beeper/argo-go/header/header.go +135 -0
  24. slidge_whatsapp/vendor/github.com/beeper/argo-go/internal/util/util.go +133 -0
  25. slidge_whatsapp/vendor/github.com/beeper/argo-go/label/label.go +384 -0
  26. slidge_whatsapp/vendor/github.com/beeper/argo-go/label/wiremarkers.go +37 -0
  27. slidge_whatsapp/vendor/github.com/beeper/argo-go/pkg/bitset/bitset.go +197 -0
  28. slidge_whatsapp/vendor/github.com/beeper/argo-go/pkg/buf/buf.go +420 -0
  29. slidge_whatsapp/vendor/github.com/beeper/argo-go/pkg/varint/varint.go +246 -0
  30. slidge_whatsapp/vendor/github.com/beeper/argo-go/wire/wire.go +614 -0
  31. slidge_whatsapp/vendor/github.com/beeper/argo-go/wirecodec/decode.go +341 -0
  32. slidge_whatsapp/vendor/github.com/elliotchance/orderedmap/v3/LICENSE +21 -0
  33. slidge_whatsapp/vendor/github.com/elliotchance/orderedmap/v3/list.go +95 -0
  34. slidge_whatsapp/vendor/github.com/elliotchance/orderedmap/v3/orderedmap.go +187 -0
  35. slidge_whatsapp/vendor/github.com/gen2brain/go-fitz/fitz.go +1 -0
  36. slidge_whatsapp/vendor/github.com/gen2brain/go-fitz/fitz_cgo.go +3 -0
  37. slidge_whatsapp/vendor/github.com/gen2brain/go-fitz/fitz_nocgo.go +4 -5
  38. slidge_whatsapp/vendor/github.com/gen2brain/go-fitz/purego_darwin.go +11 -1
  39. slidge_whatsapp/vendor/github.com/gen2brain/go-fitz/purego_linux.go +10 -0
  40. slidge_whatsapp/vendor/github.com/gen2brain/go-fitz/purego_windows.go +12 -0
  41. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/.gitignore +0 -2
  42. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/CHANGELOG.md +30 -0
  43. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/COPYRIGHT.txt +6 -1
  44. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/README.md +14 -17
  45. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/abi.go +1 -1
  46. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/abi2.go +7 -0
  47. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/assets/libffi/LICENSE +21 -0
  48. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/assets/libffi/darwin_amd64/libffi.8.dylib +0 -0
  49. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/assets/libffi/darwin_arm64/libffi.8.dylib +0 -0
  50. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/assets/libffi/windows_amd64/libffi-8.dll +0 -0
  51. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/cif.go +15 -0
  52. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/cif_arm64.go +16 -0
  53. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/embed.go +49 -0
  54. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/embed_darwin_amd64.go +10 -0
  55. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/embed_darwin_arm64.go +10 -0
  56. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/embed_windows_amd64.go +10 -0
  57. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/ffi.go +51 -13
  58. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/init.go +22 -9
  59. slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/README.md +2 -0
  60. slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.c +3096 -1651
  61. slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.h +188 -128
  62. slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_userauth.go +13 -140
  63. slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3ext.h +4 -0
  64. slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_go1.23.go +2 -2
  65. slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_go1.25.go +37 -0
  66. slidge_whatsapp/vendor/github.com/vektah/gqlparser/v2/LICENSE +19 -0
  67. slidge_whatsapp/vendor/github.com/vektah/gqlparser/v2/ast/argmap.go +37 -0
  68. slidge_whatsapp/vendor/github.com/vektah/gqlparser/v2/ast/collections.go +148 -0
  69. slidge_whatsapp/vendor/github.com/vektah/gqlparser/v2/ast/comment.go +31 -0
  70. slidge_whatsapp/vendor/github.com/vektah/gqlparser/v2/ast/decode.go +216 -0
  71. slidge_whatsapp/vendor/github.com/vektah/gqlparser/v2/ast/definition.go +110 -0
  72. slidge_whatsapp/vendor/github.com/vektah/gqlparser/v2/ast/directive.go +43 -0
  73. slidge_whatsapp/vendor/github.com/vektah/gqlparser/v2/ast/document.go +89 -0
  74. slidge_whatsapp/vendor/github.com/vektah/gqlparser/v2/ast/dumper.go +159 -0
  75. slidge_whatsapp/vendor/github.com/vektah/gqlparser/v2/ast/fragment.go +41 -0
  76. slidge_whatsapp/vendor/github.com/vektah/gqlparser/v2/ast/operation.go +32 -0
  77. slidge_whatsapp/vendor/github.com/vektah/gqlparser/v2/ast/path.go +72 -0
  78. slidge_whatsapp/vendor/github.com/vektah/gqlparser/v2/ast/selection.go +41 -0
  79. slidge_whatsapp/vendor/github.com/vektah/gqlparser/v2/ast/source.go +19 -0
  80. slidge_whatsapp/vendor/github.com/vektah/gqlparser/v2/ast/type.go +68 -0
  81. slidge_whatsapp/vendor/github.com/vektah/gqlparser/v2/ast/value.go +122 -0
  82. slidge_whatsapp/vendor/go.mau.fi/util/exhttp/handleerrors.go +60 -26
  83. slidge_whatsapp/vendor/go.mau.fi/util/exhttp/networkerror.go +2 -1
  84. slidge_whatsapp/vendor/go.mau.fi/util/exstrings/stringutil.go +28 -0
  85. slidge_whatsapp/vendor/go.mau.fi/util/exsync/event.go +19 -3
  86. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/.pre-commit-config.yaml +3 -3
  87. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate/decode.go +1 -1
  88. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate/hash.go +1 -1
  89. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate.go +5 -1
  90. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/argo/argo-wire-type-store.argo +63 -0
  91. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/argo/argo.go +62 -0
  92. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/argo/name-to-queryids.json +306 -0
  93. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/armadillomessage.go +3 -2
  94. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/call.go +1 -0
  95. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/client.go +15 -18
  96. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/connectionevents.go +5 -0
  97. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/download.go +4 -0
  98. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/errors.go +3 -0
  99. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/group.go +97 -25
  100. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/internals.go +22 -10
  101. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/message.go +10 -9
  102. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/msgsecret.go +2 -14
  103. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/newsletter.go +83 -7
  104. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/notification.go +5 -1
  105. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/pair-code.go +2 -2
  106. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/presence.go +15 -6
  107. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waBotMetadata/WABotMetadata.pb.go +5156 -0
  108. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waBotMetadata/WABotMetadata.proto +516 -0
  109. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WACompanionReg.pb.go +30 -3
  110. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WACompanionReg.proto +3 -0
  111. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.pb.go +8532 -11526
  112. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.proto +132 -438
  113. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.pb.go +52 -23
  114. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.proto +3 -0
  115. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waStatusAttributions/WAStatusAttributions.pb.go +225 -73
  116. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waStatusAttributions/WAStatusAttributions.proto +21 -5
  117. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.pb.go +884 -441
  118. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.proto +40 -0
  119. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.pb.go +60 -38
  120. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.proto +3 -0
  121. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/receipt.go +8 -1
  122. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/send.go +6 -4
  123. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/clientpayload.go +1 -1
  124. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/noop.go +3 -2
  125. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/store.go +25 -5
  126. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/store.go +3 -1
  127. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/call.go +1 -0
  128. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/events/events.go +8 -0
  129. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/jid.go +2 -1
  130. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/user.go +2 -0
  131. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/user.go +12 -8
  132. slidge_whatsapp/vendor/golang.org/x/crypto/curve25519/curve25519.go +1 -1
  133. slidge_whatsapp/vendor/golang.org/x/net/http2/config.go +44 -2
  134. slidge_whatsapp/vendor/golang.org/x/net/http2/gotrack.go +14 -3
  135. slidge_whatsapp/vendor/golang.org/x/net/http2/http2.go +7 -29
  136. slidge_whatsapp/vendor/golang.org/x/net/http2/server.go +53 -71
  137. slidge_whatsapp/vendor/golang.org/x/net/http2/transport.go +20 -74
  138. slidge_whatsapp/vendor/golang.org/x/sys/unix/affinity_linux.go +1 -3
  139. slidge_whatsapp/vendor/golang.org/x/sys/unix/mkerrors.sh +3 -0
  140. slidge_whatsapp/vendor/golang.org/x/sys/unix/syscall_darwin.go +1 -55
  141. slidge_whatsapp/vendor/golang.org/x/sys/unix/syscall_solaris.go +1 -1
  142. slidge_whatsapp/vendor/golang.org/x/sys/unix/zerrors_linux.go +47 -16
  143. slidge_whatsapp/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +3 -0
  144. slidge_whatsapp/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +3 -0
  145. slidge_whatsapp/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +3 -0
  146. slidge_whatsapp/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +3 -0
  147. slidge_whatsapp/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +3 -0
  148. slidge_whatsapp/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +3 -0
  149. slidge_whatsapp/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +3 -0
  150. slidge_whatsapp/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +3 -0
  151. slidge_whatsapp/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +3 -0
  152. slidge_whatsapp/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +3 -0
  153. slidge_whatsapp/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +3 -0
  154. slidge_whatsapp/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +3 -0
  155. slidge_whatsapp/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +3 -0
  156. slidge_whatsapp/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +3 -0
  157. slidge_whatsapp/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +3 -0
  158. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go +4 -4
  159. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go +1 -0
  160. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +1 -0
  161. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +1 -0
  162. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +1 -0
  163. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go +1 -0
  164. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +1 -0
  165. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +1 -0
  166. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +1 -0
  167. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +1 -0
  168. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +1 -0
  169. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +1 -0
  170. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +1 -0
  171. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +1 -0
  172. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +1 -0
  173. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +1 -0
  174. slidge_whatsapp/vendor/golang.org/x/sys/unix/ztypes_linux.go +168 -12
  175. slidge_whatsapp/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +17 -1
  176. slidge_whatsapp/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +16 -0
  177. slidge_whatsapp/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +18 -2
  178. slidge_whatsapp/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +16 -0
  179. slidge_whatsapp/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +16 -0
  180. slidge_whatsapp/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +17 -1
  181. slidge_whatsapp/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +16 -0
  182. slidge_whatsapp/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +16 -0
  183. slidge_whatsapp/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +17 -1
  184. slidge_whatsapp/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +18 -2
  185. slidge_whatsapp/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +16 -0
  186. slidge_whatsapp/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +16 -0
  187. slidge_whatsapp/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +16 -0
  188. slidge_whatsapp/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +16 -0
  189. slidge_whatsapp/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +16 -0
  190. slidge_whatsapp/vendor/golang.org/x/sys/windows/types_windows.go +6 -0
  191. slidge_whatsapp/vendor/golang.org/x/sys/windows/zsyscall_windows.go +483 -483
  192. slidge_whatsapp/vendor/google.golang.org/protobuf/encoding/protowire/wire.go +25 -1
  193. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb +0 -0
  194. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/filedesc/editions.go +10 -5
  195. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/filedesc/presence.go +33 -0
  196. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/genid/api_gen.go +6 -0
  197. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go +68 -22
  198. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/impl/codec_message_opaque.go +2 -1
  199. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/impl/message_opaque.go +8 -37
  200. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/impl/presence.go +0 -3
  201. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/version/version.go +1 -1
  202. slidge_whatsapp/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go +8 -0
  203. slidge_whatsapp/vendor/modules.txt +43 -23
  204. {slidge_whatsapp-0.2.7.dist-info → slidge_whatsapp-0.3.0b0.dist-info}/METADATA +2 -2
  205. {slidge_whatsapp-0.2.7.dist-info → slidge_whatsapp-0.3.0b0.dist-info}/RECORD +208 -161
  206. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/abi_amd64.go +0 -7
  207. slidge_whatsapp/vendor/golang.org/x/net/http2/config_go124.go +0 -61
  208. slidge_whatsapp/vendor/golang.org/x/net/http2/config_pre_go124.go +0 -16
  209. slidge_whatsapp/vendor/golang.org/x/net/http2/timer.go +0 -20
  210. {slidge_whatsapp-0.2.7.dist-info → slidge_whatsapp-0.3.0b0.dist-info}/LICENSE +0 -0
  211. {slidge_whatsapp-0.2.7.dist-info → slidge_whatsapp-0.3.0b0.dist-info}/WHEEL +0 -0
  212. {slidge_whatsapp-0.2.7.dist-info → slidge_whatsapp-0.3.0b0.dist-info}/entry_points.txt +0 -0
@@ -15,21 +15,32 @@ import (
15
15
  "runtime"
16
16
  "strconv"
17
17
  "sync"
18
+ "sync/atomic"
18
19
  )
19
20
 
20
21
  var DebugGoroutines = os.Getenv("DEBUG_HTTP2_GOROUTINES") == "1"
21
22
 
23
+ // Setting DebugGoroutines to false during a test to disable goroutine debugging
24
+ // results in race detector complaints when a test leaves goroutines running before
25
+ // returning. Tests shouldn't do this, of course, but when they do it generally shows
26
+ // up as infrequent, hard-to-debug flakes. (See #66519.)
27
+ //
28
+ // Disable goroutine debugging during individual tests with an atomic bool.
29
+ // (Note that it's safe to enable/disable debugging mid-test, so the actual race condition
30
+ // here is harmless.)
31
+ var disableDebugGoroutines atomic.Bool
32
+
22
33
  type goroutineLock uint64
23
34
 
24
35
  func newGoroutineLock() goroutineLock {
25
- if !DebugGoroutines {
36
+ if !DebugGoroutines || disableDebugGoroutines.Load() {
26
37
  return 0
27
38
  }
28
39
  return goroutineLock(curGoroutineID())
29
40
  }
30
41
 
31
42
  func (g goroutineLock) check() {
32
- if !DebugGoroutines {
43
+ if !DebugGoroutines || disableDebugGoroutines.Load() {
33
44
  return
34
45
  }
35
46
  if curGoroutineID() != uint64(g) {
@@ -38,7 +49,7 @@ func (g goroutineLock) check() {
38
49
  }
39
50
 
40
51
  func (g goroutineLock) checkNotOn() {
41
- if !DebugGoroutines {
52
+ if !DebugGoroutines || disableDebugGoroutines.Load() {
42
53
  return
43
54
  }
44
55
  if curGoroutineID() == uint64(g) {
@@ -11,13 +11,10 @@
11
11
  // requires Go 1.6 or later)
12
12
  //
13
13
  // See https://http2.github.io/ for more information on HTTP/2.
14
- //
15
- // See https://http2.golang.org/ for a test server running this code.
16
14
  package http2 // import "golang.org/x/net/http2"
17
15
 
18
16
  import (
19
17
  "bufio"
20
- "context"
21
18
  "crypto/tls"
22
19
  "errors"
23
20
  "fmt"
@@ -257,15 +254,13 @@ func (cw closeWaiter) Wait() {
257
254
  // idle memory usage with many connections.
258
255
  type bufferedWriter struct {
259
256
  _ incomparable
260
- group synctestGroupInterface // immutable
261
- conn net.Conn // immutable
262
- bw *bufio.Writer // non-nil when data is buffered
263
- byteTimeout time.Duration // immutable, WriteByteTimeout
257
+ conn net.Conn // immutable
258
+ bw *bufio.Writer // non-nil when data is buffered
259
+ byteTimeout time.Duration // immutable, WriteByteTimeout
264
260
  }
265
261
 
266
- func newBufferedWriter(group synctestGroupInterface, conn net.Conn, timeout time.Duration) *bufferedWriter {
262
+ func newBufferedWriter(conn net.Conn, timeout time.Duration) *bufferedWriter {
267
263
  return &bufferedWriter{
268
- group: group,
269
264
  conn: conn,
270
265
  byteTimeout: timeout,
271
266
  }
@@ -316,24 +311,18 @@ func (w *bufferedWriter) Flush() error {
316
311
  type bufferedWriterTimeoutWriter bufferedWriter
317
312
 
318
313
  func (w *bufferedWriterTimeoutWriter) Write(p []byte) (n int, err error) {
319
- return writeWithByteTimeout(w.group, w.conn, w.byteTimeout, p)
314
+ return writeWithByteTimeout(w.conn, w.byteTimeout, p)
320
315
  }
321
316
 
322
317
  // writeWithByteTimeout writes to conn.
323
318
  // If more than timeout passes without any bytes being written to the connection,
324
319
  // the write fails.
325
- func writeWithByteTimeout(group synctestGroupInterface, conn net.Conn, timeout time.Duration, p []byte) (n int, err error) {
320
+ func writeWithByteTimeout(conn net.Conn, timeout time.Duration, p []byte) (n int, err error) {
326
321
  if timeout <= 0 {
327
322
  return conn.Write(p)
328
323
  }
329
324
  for {
330
- var now time.Time
331
- if group == nil {
332
- now = time.Now()
333
- } else {
334
- now = group.Now()
335
- }
336
- conn.SetWriteDeadline(now.Add(timeout))
325
+ conn.SetWriteDeadline(time.Now().Add(timeout))
337
326
  nn, err := conn.Write(p[n:])
338
327
  n += nn
339
328
  if n == len(p) || nn == 0 || !errors.Is(err, os.ErrDeadlineExceeded) {
@@ -419,14 +408,3 @@ func (s *sorter) SortStrings(ss []string) {
419
408
  // makes that struct also non-comparable, and generally doesn't add
420
409
  // any size (as long as it's first).
421
410
  type incomparable [0]func()
422
-
423
- // synctestGroupInterface is the methods of synctestGroup used by Server and Transport.
424
- // It's defined as an interface here to let us keep synctestGroup entirely test-only
425
- // and not a part of non-test builds.
426
- type synctestGroupInterface interface {
427
- Join()
428
- Now() time.Time
429
- NewTimer(d time.Duration) timer
430
- AfterFunc(d time.Duration, f func()) timer
431
- ContextWithTimeout(ctx context.Context, d time.Duration) (context.Context, context.CancelFunc)
432
- }
@@ -176,39 +176,6 @@ type Server struct {
176
176
  // so that we don't embed a Mutex in this struct, which will make the
177
177
  // struct non-copyable, which might break some callers.
178
178
  state *serverInternalState
179
-
180
- // Synchronization group used for testing.
181
- // Outside of tests, this is nil.
182
- group synctestGroupInterface
183
- }
184
-
185
- func (s *Server) markNewGoroutine() {
186
- if s.group != nil {
187
- s.group.Join()
188
- }
189
- }
190
-
191
- func (s *Server) now() time.Time {
192
- if s.group != nil {
193
- return s.group.Now()
194
- }
195
- return time.Now()
196
- }
197
-
198
- // newTimer creates a new time.Timer, or a synthetic timer in tests.
199
- func (s *Server) newTimer(d time.Duration) timer {
200
- if s.group != nil {
201
- return s.group.NewTimer(d)
202
- }
203
- return timeTimer{time.NewTimer(d)}
204
- }
205
-
206
- // afterFunc creates a new time.AfterFunc timer, or a synthetic timer in tests.
207
- func (s *Server) afterFunc(d time.Duration, f func()) timer {
208
- if s.group != nil {
209
- return s.group.AfterFunc(d, f)
210
- }
211
- return timeTimer{time.AfterFunc(d, f)}
212
179
  }
213
180
 
214
181
  type serverInternalState struct {
@@ -423,6 +390,9 @@ func (o *ServeConnOpts) handler() http.Handler {
423
390
  //
424
391
  // The opts parameter is optional. If nil, default values are used.
425
392
  func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) {
393
+ if opts == nil {
394
+ opts = &ServeConnOpts{}
395
+ }
426
396
  s.serveConn(c, opts, nil)
427
397
  }
428
398
 
@@ -438,7 +408,7 @@ func (s *Server) serveConn(c net.Conn, opts *ServeConnOpts, newf func(*serverCon
438
408
  conn: c,
439
409
  baseCtx: baseCtx,
440
410
  remoteAddrStr: c.RemoteAddr().String(),
441
- bw: newBufferedWriter(s.group, c, conf.WriteByteTimeout),
411
+ bw: newBufferedWriter(c, conf.WriteByteTimeout),
442
412
  handler: opts.handler(),
443
413
  streams: make(map[uint32]*stream),
444
414
  readFrameCh: make(chan readFrameResult),
@@ -638,11 +608,11 @@ type serverConn struct {
638
608
  pingSent bool
639
609
  sentPingData [8]byte
640
610
  goAwayCode ErrCode
641
- shutdownTimer timer // nil until used
642
- idleTimer timer // nil if unused
611
+ shutdownTimer *time.Timer // nil until used
612
+ idleTimer *time.Timer // nil if unused
643
613
  readIdleTimeout time.Duration
644
614
  pingTimeout time.Duration
645
- readIdleTimer timer // nil if unused
615
+ readIdleTimer *time.Timer // nil if unused
646
616
 
647
617
  // Owned by the writeFrameAsync goroutine:
648
618
  headerWriteBuf bytes.Buffer
@@ -687,12 +657,12 @@ type stream struct {
687
657
  flow outflow // limits writing from Handler to client
688
658
  inflow inflow // what the client is allowed to POST/etc to us
689
659
  state streamState
690
- resetQueued bool // RST_STREAM queued for write; set by sc.resetStream
691
- gotTrailerHeader bool // HEADER frame for trailers was seen
692
- wroteHeaders bool // whether we wrote headers (not status 100)
693
- readDeadline timer // nil if unused
694
- writeDeadline timer // nil if unused
695
- closeErr error // set before cw is closed
660
+ resetQueued bool // RST_STREAM queued for write; set by sc.resetStream
661
+ gotTrailerHeader bool // HEADER frame for trailers was seen
662
+ wroteHeaders bool // whether we wrote headers (not status 100)
663
+ readDeadline *time.Timer // nil if unused
664
+ writeDeadline *time.Timer // nil if unused
665
+ closeErr error // set before cw is closed
696
666
 
697
667
  trailer http.Header // accumulated trailers
698
668
  reqTrailer http.Header // handler's Request.Trailer
@@ -848,7 +818,6 @@ type readFrameResult struct {
848
818
  // consumer is done with the frame.
849
819
  // It's run on its own goroutine.
850
820
  func (sc *serverConn) readFrames() {
851
- sc.srv.markNewGoroutine()
852
821
  gate := make(chan struct{})
853
822
  gateDone := func() { gate <- struct{}{} }
854
823
  for {
@@ -881,7 +850,6 @@ type frameWriteResult struct {
881
850
  // At most one goroutine can be running writeFrameAsync at a time per
882
851
  // serverConn.
883
852
  func (sc *serverConn) writeFrameAsync(wr FrameWriteRequest, wd *writeData) {
884
- sc.srv.markNewGoroutine()
885
853
  var err error
886
854
  if wd == nil {
887
855
  err = wr.write.writeFrame(sc)
@@ -965,22 +933,22 @@ func (sc *serverConn) serve(conf http2Config) {
965
933
  sc.setConnState(http.StateIdle)
966
934
 
967
935
  if sc.srv.IdleTimeout > 0 {
968
- sc.idleTimer = sc.srv.afterFunc(sc.srv.IdleTimeout, sc.onIdleTimer)
936
+ sc.idleTimer = time.AfterFunc(sc.srv.IdleTimeout, sc.onIdleTimer)
969
937
  defer sc.idleTimer.Stop()
970
938
  }
971
939
 
972
940
  if conf.SendPingTimeout > 0 {
973
941
  sc.readIdleTimeout = conf.SendPingTimeout
974
- sc.readIdleTimer = sc.srv.afterFunc(conf.SendPingTimeout, sc.onReadIdleTimer)
942
+ sc.readIdleTimer = time.AfterFunc(conf.SendPingTimeout, sc.onReadIdleTimer)
975
943
  defer sc.readIdleTimer.Stop()
976
944
  }
977
945
 
978
946
  go sc.readFrames() // closed by defer sc.conn.Close above
979
947
 
980
- settingsTimer := sc.srv.afterFunc(firstSettingsTimeout, sc.onSettingsTimer)
948
+ settingsTimer := time.AfterFunc(firstSettingsTimeout, sc.onSettingsTimer)
981
949
  defer settingsTimer.Stop()
982
950
 
983
- lastFrameTime := sc.srv.now()
951
+ lastFrameTime := time.Now()
984
952
  loopNum := 0
985
953
  for {
986
954
  loopNum++
@@ -994,7 +962,7 @@ func (sc *serverConn) serve(conf http2Config) {
994
962
  case res := <-sc.wroteFrameCh:
995
963
  sc.wroteFrame(res)
996
964
  case res := <-sc.readFrameCh:
997
- lastFrameTime = sc.srv.now()
965
+ lastFrameTime = time.Now()
998
966
  // Process any written frames before reading new frames from the client since a
999
967
  // written frame could have triggered a new stream to be started.
1000
968
  if sc.writingFrameAsync {
@@ -1077,7 +1045,7 @@ func (sc *serverConn) handlePingTimer(lastFrameReadTime time.Time) {
1077
1045
  }
1078
1046
 
1079
1047
  pingAt := lastFrameReadTime.Add(sc.readIdleTimeout)
1080
- now := sc.srv.now()
1048
+ now := time.Now()
1081
1049
  if pingAt.After(now) {
1082
1050
  // We received frames since arming the ping timer.
1083
1051
  // Reset it for the next possible timeout.
@@ -1141,10 +1109,10 @@ func (sc *serverConn) readPreface() error {
1141
1109
  errc <- nil
1142
1110
  }
1143
1111
  }()
1144
- timer := sc.srv.newTimer(prefaceTimeout) // TODO: configurable on *Server?
1112
+ timer := time.NewTimer(prefaceTimeout) // TODO: configurable on *Server?
1145
1113
  defer timer.Stop()
1146
1114
  select {
1147
- case <-timer.C():
1115
+ case <-timer.C:
1148
1116
  return errPrefaceTimeout
1149
1117
  case err := <-errc:
1150
1118
  if err == nil {
@@ -1160,6 +1128,21 @@ var errChanPool = sync.Pool{
1160
1128
  New: func() interface{} { return make(chan error, 1) },
1161
1129
  }
1162
1130
 
1131
+ func getErrChan() chan error {
1132
+ if inTests {
1133
+ // Channels cannot be reused across synctest tests.
1134
+ return make(chan error, 1)
1135
+ } else {
1136
+ return errChanPool.Get().(chan error)
1137
+ }
1138
+ }
1139
+
1140
+ func putErrChan(ch chan error) {
1141
+ if !inTests {
1142
+ errChanPool.Put(ch)
1143
+ }
1144
+ }
1145
+
1163
1146
  var writeDataPool = sync.Pool{
1164
1147
  New: func() interface{} { return new(writeData) },
1165
1148
  }
@@ -1167,7 +1150,7 @@ var writeDataPool = sync.Pool{
1167
1150
  // writeDataFromHandler writes DATA response frames from a handler on
1168
1151
  // the given stream.
1169
1152
  func (sc *serverConn) writeDataFromHandler(stream *stream, data []byte, endStream bool) error {
1170
- ch := errChanPool.Get().(chan error)
1153
+ ch := getErrChan()
1171
1154
  writeArg := writeDataPool.Get().(*writeData)
1172
1155
  *writeArg = writeData{stream.id, data, endStream}
1173
1156
  err := sc.writeFrameFromHandler(FrameWriteRequest{
@@ -1199,7 +1182,7 @@ func (sc *serverConn) writeDataFromHandler(stream *stream, data []byte, endStrea
1199
1182
  return errStreamClosed
1200
1183
  }
1201
1184
  }
1202
- errChanPool.Put(ch)
1185
+ putErrChan(ch)
1203
1186
  if frameWriteDone {
1204
1187
  writeDataPool.Put(writeArg)
1205
1188
  }
@@ -1513,7 +1496,7 @@ func (sc *serverConn) goAway(code ErrCode) {
1513
1496
 
1514
1497
  func (sc *serverConn) shutDownIn(d time.Duration) {
1515
1498
  sc.serveG.check()
1516
- sc.shutdownTimer = sc.srv.afterFunc(d, sc.onShutdownTimer)
1499
+ sc.shutdownTimer = time.AfterFunc(d, sc.onShutdownTimer)
1517
1500
  }
1518
1501
 
1519
1502
  func (sc *serverConn) resetStream(se StreamError) {
@@ -2118,7 +2101,7 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error {
2118
2101
  // (in Go 1.8), though. That's a more sane option anyway.
2119
2102
  if sc.hs.ReadTimeout > 0 {
2120
2103
  sc.conn.SetReadDeadline(time.Time{})
2121
- st.readDeadline = sc.srv.afterFunc(sc.hs.ReadTimeout, st.onReadTimeout)
2104
+ st.readDeadline = time.AfterFunc(sc.hs.ReadTimeout, st.onReadTimeout)
2122
2105
  }
2123
2106
 
2124
2107
  return sc.scheduleHandler(id, rw, req, handler)
@@ -2216,7 +2199,7 @@ func (sc *serverConn) newStream(id, pusherID uint32, state streamState) *stream
2216
2199
  st.flow.add(sc.initialStreamSendWindowSize)
2217
2200
  st.inflow.init(sc.initialStreamRecvWindowSize)
2218
2201
  if sc.hs.WriteTimeout > 0 {
2219
- st.writeDeadline = sc.srv.afterFunc(sc.hs.WriteTimeout, st.onWriteTimeout)
2202
+ st.writeDeadline = time.AfterFunc(sc.hs.WriteTimeout, st.onWriteTimeout)
2220
2203
  }
2221
2204
 
2222
2205
  sc.streams[id] = st
@@ -2405,7 +2388,6 @@ func (sc *serverConn) handlerDone() {
2405
2388
 
2406
2389
  // Run on its own goroutine.
2407
2390
  func (sc *serverConn) runHandler(rw *responseWriter, req *http.Request, handler func(http.ResponseWriter, *http.Request)) {
2408
- sc.srv.markNewGoroutine()
2409
2391
  defer sc.sendServeMsg(handlerDoneMsg)
2410
2392
  didPanic := true
2411
2393
  defer func() {
@@ -2454,7 +2436,7 @@ func (sc *serverConn) writeHeaders(st *stream, headerData *writeResHeaders) erro
2454
2436
  // waiting for this frame to be written, so an http.Flush mid-handler
2455
2437
  // writes out the correct value of keys, before a handler later potentially
2456
2438
  // mutates it.
2457
- errc = errChanPool.Get().(chan error)
2439
+ errc = getErrChan()
2458
2440
  }
2459
2441
  if err := sc.writeFrameFromHandler(FrameWriteRequest{
2460
2442
  write: headerData,
@@ -2466,7 +2448,7 @@ func (sc *serverConn) writeHeaders(st *stream, headerData *writeResHeaders) erro
2466
2448
  if errc != nil {
2467
2449
  select {
2468
2450
  case err := <-errc:
2469
- errChanPool.Put(errc)
2451
+ putErrChan(errc)
2470
2452
  return err
2471
2453
  case <-sc.doneServing:
2472
2454
  return errClientDisconnected
@@ -2573,7 +2555,7 @@ func (b *requestBody) Read(p []byte) (n int, err error) {
2573
2555
  if err == io.EOF {
2574
2556
  b.sawEOF = true
2575
2557
  }
2576
- if b.conn == nil && inTests {
2558
+ if b.conn == nil {
2577
2559
  return
2578
2560
  }
2579
2561
  b.conn.noteBodyReadFromHandler(b.stream, n, err)
@@ -2702,7 +2684,7 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) {
2702
2684
  var date string
2703
2685
  if _, ok := rws.snapHeader["Date"]; !ok {
2704
2686
  // TODO(bradfitz): be faster here, like net/http? measure.
2705
- date = rws.conn.srv.now().UTC().Format(http.TimeFormat)
2687
+ date = time.Now().UTC().Format(http.TimeFormat)
2706
2688
  }
2707
2689
 
2708
2690
  for _, v := range rws.snapHeader["Trailer"] {
@@ -2824,7 +2806,7 @@ func (rws *responseWriterState) promoteUndeclaredTrailers() {
2824
2806
 
2825
2807
  func (w *responseWriter) SetReadDeadline(deadline time.Time) error {
2826
2808
  st := w.rws.stream
2827
- if !deadline.IsZero() && deadline.Before(w.rws.conn.srv.now()) {
2809
+ if !deadline.IsZero() && deadline.Before(time.Now()) {
2828
2810
  // If we're setting a deadline in the past, reset the stream immediately
2829
2811
  // so writes after SetWriteDeadline returns will fail.
2830
2812
  st.onReadTimeout()
@@ -2840,9 +2822,9 @@ func (w *responseWriter) SetReadDeadline(deadline time.Time) error {
2840
2822
  if deadline.IsZero() {
2841
2823
  st.readDeadline = nil
2842
2824
  } else if st.readDeadline == nil {
2843
- st.readDeadline = sc.srv.afterFunc(deadline.Sub(sc.srv.now()), st.onReadTimeout)
2825
+ st.readDeadline = time.AfterFunc(deadline.Sub(time.Now()), st.onReadTimeout)
2844
2826
  } else {
2845
- st.readDeadline.Reset(deadline.Sub(sc.srv.now()))
2827
+ st.readDeadline.Reset(deadline.Sub(time.Now()))
2846
2828
  }
2847
2829
  })
2848
2830
  return nil
@@ -2850,7 +2832,7 @@ func (w *responseWriter) SetReadDeadline(deadline time.Time) error {
2850
2832
 
2851
2833
  func (w *responseWriter) SetWriteDeadline(deadline time.Time) error {
2852
2834
  st := w.rws.stream
2853
- if !deadline.IsZero() && deadline.Before(w.rws.conn.srv.now()) {
2835
+ if !deadline.IsZero() && deadline.Before(time.Now()) {
2854
2836
  // If we're setting a deadline in the past, reset the stream immediately
2855
2837
  // so writes after SetWriteDeadline returns will fail.
2856
2838
  st.onWriteTimeout()
@@ -2866,9 +2848,9 @@ func (w *responseWriter) SetWriteDeadline(deadline time.Time) error {
2866
2848
  if deadline.IsZero() {
2867
2849
  st.writeDeadline = nil
2868
2850
  } else if st.writeDeadline == nil {
2869
- st.writeDeadline = sc.srv.afterFunc(deadline.Sub(sc.srv.now()), st.onWriteTimeout)
2851
+ st.writeDeadline = time.AfterFunc(deadline.Sub(time.Now()), st.onWriteTimeout)
2870
2852
  } else {
2871
- st.writeDeadline.Reset(deadline.Sub(sc.srv.now()))
2853
+ st.writeDeadline.Reset(deadline.Sub(time.Now()))
2872
2854
  }
2873
2855
  })
2874
2856
  return nil
@@ -3147,7 +3129,7 @@ func (w *responseWriter) Push(target string, opts *http.PushOptions) error {
3147
3129
  method: opts.Method,
3148
3130
  url: u,
3149
3131
  header: cloneHeader(opts.Header),
3150
- done: errChanPool.Get().(chan error),
3132
+ done: getErrChan(),
3151
3133
  }
3152
3134
 
3153
3135
  select {
@@ -3164,7 +3146,7 @@ func (w *responseWriter) Push(target string, opts *http.PushOptions) error {
3164
3146
  case <-st.cw:
3165
3147
  return errStreamClosed
3166
3148
  case err := <-msg.done:
3167
- errChanPool.Put(msg.done)
3149
+ putErrChan(msg.done)
3168
3150
  return err
3169
3151
  }
3170
3152
  }