@@ -51,6 +51,7 @@ package ibmmq
5151#include <string.h>
5252#include <cmqc.h>
5353#include <cmqxc.h>
54+
5455*/
5556import "C"
5657
@@ -219,6 +220,7 @@ func (x *MQQueueManager) Disc() error {
219220 var mqrc C.MQLONG
220221 var mqcc C.MQLONG
221222
223+ savedConn := x .hConn
222224 C .MQDISC (& x .hConn , & mqcc , & mqrc )
223225
224226 mqreturn := MQReturn {MQCC : int32 (mqcc ),
@@ -230,6 +232,8 @@ func (x *MQQueueManager) Disc() error {
230232 return & mqreturn
231233 }
232234
235+ cbRemoveConnection (savedConn )
236+
233237 return nil
234238}
235239
@@ -248,7 +252,7 @@ func (x *MQQueueManager) Open(good *MQOD, goOpenOptions int32) (MQObject, error)
248252 }
249253
250254 copyODtoC (& mqod , good )
251- mqOpenOptions = C .MQLONG (goOpenOptions )
255+ mqOpenOptions = C .MQLONG (goOpenOptions ) | C . MQOO_FAIL_IF_QUIESCING
252256
253257 C .MQOPEN (x .hConn ,
254258 (C .PMQVOID )(unsafe .Pointer (& mqod )),
@@ -288,6 +292,9 @@ func (object *MQObject) Close(goCloseOptions int32) error {
288292
289293 mqCloseOptions = C .MQLONG (goCloseOptions )
290294
295+ savedHConn := object .qMgr .hConn
296+ savedHObj := object .hObj
297+
291298 C .MQCLOSE (object .qMgr .hConn , & object .hObj , mqCloseOptions , & mqcc , & mqrc )
292299
293300 mqreturn := MQReturn {MQCC : int32 (mqcc ),
@@ -299,6 +306,7 @@ func (object *MQObject) Close(goCloseOptions int32) error {
299306 return & mqreturn
300307 }
301308
309+ cbRemoveHandle (savedHConn , savedHObj )
302310 return nil
303311
304312}
@@ -373,6 +381,33 @@ func (subObject *MQObject) Subrq(gosro *MQSRO, action int32) error {
373381 return nil
374382}
375383
384+ /*
385+ Begin is the function to start a two-phase XA transaction coordinated by MQ
386+ */
387+ func (x * MQQueueManager ) Begin (gobo * MQBO ) error {
388+ var mqrc C.MQLONG
389+ var mqcc C.MQLONG
390+ var mqbo C.MQBO
391+
392+ copyBOtoC (& mqbo , gobo )
393+
394+ C .MQBEGIN (x .hConn , (C .PMQVOID )(unsafe .Pointer (& mqbo )), & mqcc , & mqrc )
395+
396+ copyBOfromC (& mqbo , gobo )
397+
398+ mqreturn := MQReturn {MQCC : int32 (mqcc ),
399+ MQRC : int32 (mqrc ),
400+ verb : "MQBEGIN" ,
401+ }
402+
403+ if mqcc != C .MQCC_OK {
404+ return & mqreturn
405+ }
406+
407+ return nil
408+
409+ }
410+
376411/*
377412Cmit is the function to commit an in-flight transaction
378413*/
0 commit comments