1. 07 2月, 2014 3 次提交
    • J
      libxl: improve subprocess handling · 778067e1
      Jim Fehlig 提交于
      If available, let libxl handle reaping any children it creates by
      specifying libxl_sigchld_owner_libxl_always_selective_reap.  This
      feature was added to improve subprocess handling in libxl when used
      in an application that does not install a SIGCHLD handler like
      libvirt
      
      http://lists.xen.org/archives/html/xen-devel/2014-01/msg01555.html
      
      Prior to this patch, it is possible to hit asserts in libxl when
      reaping subprocesses, particularly during simultaneous operations
      on multiple domains.  With this patch, and the corresponding changes
      to libxl, I no longer see the asserts.  Note that the libxl changes
      will be included in Xen 4.4.0.  Previous Xen versions will be
      susceptible to hitting the asserts even with this patch applied to
      the libvirt libxl driver.
      Signed-off-by: NJim Fehlig <jfehlig@suse.com>
      778067e1
    • J
      libxl: remove list of timer registrations from libxlDomainObjPrivate · eaa8d9b2
      Jim Fehlig 提交于
      Due to some misunderstanding of requirements libxl places on timer
      handling, I introduced the half-brained idea of maintaining a list
      of timeouts that the driver could force to expire before freeing a
      libxlDomainObjPrivate (and hence libxl_ctx).  But testing all
      the latest versions of Xen supported by the libxl driver (4.2.3,
      4.3.1, 4.4.0 RC3), I see that libxl will handle this just fine and
      there is no need to force expiration behind libxl's back.  Indeed it
      may be harmful to do so.
      
      This patch removes the timer list, allowing libxl to handle cleanup
      of its timer registrations.
      Signed-off-by: NJim Fehlig <jfehlig@suse.com>
      eaa8d9b2
    • J
      libxl: fix leaking libxlDomainObjPrivate · cda52dbf
      Jim Fehlig 提交于
      When libxl registers an FD with the libxl driver, the refcnt of the
      associated libxlDomainObjPrivate object is incremented. The refcnt
      is decremented when libxl deregisters the FD.  But some FDs are only
      deregistered when their libxl ctx is freed, which unfortunately is
      done in the libxlDomainObjPrivate dispose function.  With references
      held by the FDs, libxlDomainObjPrivate is never disposed.
      
      I added the ref/unref in FD registration/deregistration when adding
      the same in timer registration/deregistration.  For timers, this
      is a simple approach to ensuring the libxlDomainObjPrivate is not
      disposed prior to their expirtation, which libxl guarantees will
      occur.  It is not needed for FDs, and only causes
      libxlDomainObjPrivate to leak.
      
      This patch removes the reference on libxlDomainObjPrivate for FD
      registrations, but retains them for timer registrations.  Tested on
      the latest releases of Xen supported by the libxl driver:  4.2.3,
      4.3.1, and 4.4.0 RC3.
      Signed-off-by: NJim Fehlig <jfehlig@suse.com>
      cda52dbf
  2. 21 12月, 2013 1 次提交
  3. 15 10月, 2013 1 次提交
    • E
      maint: avoid 'const fooPtr' in domain_conf · d2467709
      Eric Blake 提交于
      'const fooPtr' is the same as 'foo * const' (the pointer won't
      change, but it's contents can).  But in general, if an interface
      is trying to be const-correct, it should be using 'const foo *'
      (the pointer is to data that can't be changed).
      
      Fix up offenders in src/conf/domain_conf, and their fallout.
      
      Several things to note: virObjectLock() requires a non-const
      argument; if this were C++, we could treat the locking field
      as 'mutable' and allow locking an otherwise 'const' object, but
      that is a more invasive change, so I instead dropped attempts
      to be const-correct on domain lookup.  virXMLPropString and
      friends require a non-const xmlNodePtr - this is because libxml2
      is not a const-correct library.  We could make the src/util/virxml
      wrappers cast away const, but I figured it was easier to not
      try to mark xmlNodePtr as const.  Finally, virDomainDeviceDefCopy
      was a rather hard conversion - it calls virDomainDeviceDefPostParse,
      which in turn in the xen driver was actually modifying the domain
      outside of the current device being visited.  We should not be
      adding a device on the first per-device callback, but waiting until
      after all per-device callbacks are complete.
      
      * src/conf/domain_conf.h (virDomainObjListFindByID)
      (virDomainObjListFindByUUID, virDomainObjListFindByName)
      (virDomainObjAssignDef, virDomainObjListAdd): Drop attempt at
      const.
      (virDomainDeviceDefCopy): Use intended type.
      (virDomainDeviceDefParse, virDomainDeviceDefPostParseCallback)
      (virDomainVideoDefaultType, virDomainVideoDefaultRAM)
      (virDomainChrGetDomainPtrs): Make const-correct.
      * src/conf/domain_conf.c (virDomainObjListFindByID)
      (virDomainObjListFindByUUID, virDomainObjListFindByName)
      (virDomainDeviceDefCopy, virDomainObjListAdd)
      (virDomainObjAssignDef, virDomainHostdevSubsysUsbDefParseXML)
      (virDomainHostdevSubsysPciOrigStatesDefParseXML)
      (virDomainHostdevSubsysPciDefParseXML)
      (virDomainHostdevSubsysScsiDefParseXML)
      (virDomainControllerModelTypeFromString)
      (virDomainTPMDefParseXML, virDomainTimerDefParseXML)
      (virDomainSoundCodecDefParseXML, virDomainSoundDefParseXML)
      (virDomainWatchdogDefParseXML, virDomainRNGDefParseXML)
      (virDomainMemballoonDefParseXML, virDomainNVRAMDefParseXML)
      (virSysinfoParseXML, virDomainVideoAccelDefParseXML)
      (virDomainVideoDefParseXML, virDomainHostdevDefParseXML)
      (virDomainRedirdevDefParseXML)
      (virDomainRedirFilterUsbDevDefParseXML)
      (virDomainRedirFilterDefParseXML, virDomainIdMapEntrySort)
      (virDomainIdmapDefParseXML, virDomainVcpuPinDefParseXML)
      (virDiskNameToBusDeviceIndex, virDomainDeviceDefCopy)
      (virDomainVideoDefaultType, virDomainHostdevAssignAddress)
      (virDomainDeviceDefPostParseInternal, virDomainDeviceDefPostParse)
      (virDomainChrGetDomainPtrs, virDomainControllerSCSINextUnit)
      (virDomainSCSIDriveAddressIsUsed)
      (virDomainDriveAddressIsUsedByDisk)
      (virDomainDriveAddressIsUsedByHostdev): Fix fallout.
      * src/openvz/openvz_driver.c (openvzDomainDeviceDefPostParse):
      Likewise.
      * src/libxl/libxl_domain.c (libxlDomainDeviceDefPostParse):
      Likewise.
      * src/qemu/qemu_domain.c (qemuDomainDeviceDefPostParse)
      (qemuDomainDefaultNetModel): Likewise.
      * src/lxc/lxc_domain.c (virLXCDomainDeviceDefPostParse):
      Likewise.
      * src/uml/uml_driver.c (umlDomainDeviceDefPostParse): Likewise.
      * src/xen/xen_driver.c (xenDomainDeviceDefPostParse): Split...
      (xenDomainDefPostParse): ...since per-device callback is not the
      time to be adding a device.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      d2467709
  4. 04 9月, 2013 1 次提交
    • J
      libxl: Introduce libxl_domain.[ch] · 12315cd7
      Jim Fehlig 提交于
      Create libxl_domain.[ch] and move all functions operating on
      libxlDomainObjPrivate to these files.  This will be useful for
      future patches that e.g. add job support for libxlDomainObjPrivate.
      12315cd7