On 12/27/19 4:32 PM, George Dunlap wrote: > The current fromC array code will do the "magic" casting and > martialling even when num_foo variable is 0. Go crashes when doing > the cast. > > Furthermore, the current toC array code will convert a nil slice into > a zero-length malloc. The resulting pointer is non-NULL, and confuses > libxl. > > Only do array marshalling if the number of elements is non-zero; > otherwise, leave the target pointer empty (nil for Go slices, NULL for > C arrays). > > The toC half of this should be folded into "golang/xenlight: > implement array Go to C marshaling". > > Signed-off-by: George Dunlap <george.dun...@citrix.com>
The .go program I used to test this series is attached, to give you an idea what the current iteration looks like, and potentially give it a spin. -George
package main import ( "fmt" xl "golang.xenproject.org/xenlight" ) func main() { ctx, err := xl.NewContext() if err != nil { fmt.Printf("Opening context: %v\n", err) return } defer ctx.Close() doms := ctx.ListDomain() for i := range doms { fmt.Printf("%d %v\n", doms[i].Domid, doms[i].Uuid) } fmt.Printf("String for error ErrorNonspecific: %v\n", xl.ErrorNonspecific) // type = "pv" dconf, err := xl.NewDomainConfig(xl.DomainTypePv) if err != nil { fmt.Printf("NewDomainConfig: %v\n", err) return } dconf.CInfo.Type = xl.DomainTypePv // name = "c6-01" dconf.CInfo.Name = "c6-01" // vcpus=4 dconf.BInfo.MaxVcpus = 4 // memory = "2048" dconf.BInfo.MaxMemkb = 2048 * 1024 dconf.BInfo.TargetMemkb = 2048 * 1024 // on_crash = 'destroy' dconf.OnCrash = xl.ActionOnShutdownDestroy // bootloader = "pygrub" dconf.BInfo.Bootloader = "pygrub" // disk = [ 'vdev=hda,format=raw,target=/images/c6-01.raw'] { disk, err := xl.NewDeviceDisk() if err != nil { fmt.Printf("NewDeviceDisk: %v\n", err) return } disk.Vdev = "hda" //disk.DiskBackend = xl.DiskBackendPhy disk.Format = xl.DiskFormatRaw disk.PdevPath = "/images/c6-01.raw" dconf.Disks = append(dconf.Disks, *disk) } // vif = [ 'mac=5a:5b:d6:f1:d6:b4' ] { vif, err := xl.NewDeviceNic() if err != nil { fmt.Printf("NewDeviceNic: %v\n", err) return } vif.Mac = xl.Mac{ 0x5a, 0x5b, 0xd6, 0x31, 0xd6, 0xb4 } dconf.Nics = append(dconf.Nics, *vif) } // serial='pty' # HVM only did, err := ctx.DomainCreateNew(dconf) if err != nil { fmt.Printf("Creating domain: %v\n", err) return } fmt.Printf("Domain %s(%d) created successfully", dconf.CInfo.Name, did) }
_______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel