@@ -177,7 +177,7 @@ func (is *IedServer) SetHandleWriteAccess(modelNode *ModelNode, handler WriteAcc
177
177
178
178
callbackId := callbackIdGen .Add (1 )
179
179
// 将 int 转为 uintptr,再转为 unsafe.Pointer
180
- cPtr := unsafe . Pointer ( uintptr ( callbackId ) )
180
+ cPtr := intToPointerBug58625 ( callbackId )
181
181
writeAccessCallbacks [callbackId ] = & writeAccessCallback {
182
182
node : modelNode ,
183
183
handler : handler ,
@@ -193,7 +193,7 @@ func (is *IedServer) SetControlHandler(modelNode *ModelNode, handler ControlHand
193
193
194
194
callbackId := callbackIdGen .Add (1 )
195
195
// 将 int 转为 uintptr,再转为 unsafe.Pointer
196
- cPtr := unsafe . Pointer ( uintptr ( callbackId ) )
196
+ cPtr := intToPointerBug58625 ( callbackId )
197
197
controlCallbacks [callbackId ] = & controlCallback {
198
198
node : modelNode ,
199
199
handler : handler ,
@@ -202,6 +202,12 @@ func (is *IedServer) SetControlHandler(modelNode *ModelNode, handler ControlHand
202
202
C .IedServer_setControlHandler (is .server , (* C .DataObject )(modelNode ._modelNode ), (* [0 ]byte )(C .controlHandlerBridge ), cPtr )
203
203
}
204
204
205
+ // intToPointerBug58625 is a helper function to fix issue #58625 in Go | https://github.com/golang/go/issues/58625
206
+ func intToPointerBug58625 (i int32 ) unsafe.Pointer {
207
+ var intPtr = uintptr (i )
208
+ return * (* unsafe .Pointer )(unsafe .Pointer (& intPtr ))
209
+ }
210
+
205
211
func (is * IedServer ) SetAuthenticator (clientAuthenticator ClientAuthenticator ) {
206
212
is .clientAuthenticator = clientAuthenticator
207
213
cPtr := unsafe .Pointer (is )
0 commit comments