1. 28 10月, 2011 1 次提交
    • D
      Extend RPC server to allow FD passing · 3ae0ab67
      Daniel P. Berrange 提交于
      The RPC server classes are extended to allow FDs to be received
      from clients with calls. There is not currently any way for a
      procedure to pass FDs back to the client with replies
      
      * daemon/remote.c, src/rpc/gendispatch.pl: Change virNetMessageHeaderPtr
        param to virNetMessagePtr in dispatcher impls
      * src/rpc/virnetserver.c, src/rpc/virnetserverclient.c,
        src/rpc/virnetserverprogram.c, src/rpc/virnetserverprogram.h:
        Extend to support FD passing
      3ae0ab67
  2. 07 10月, 2011 2 次提交
    • D
      Don't send back unknown program errors for async messages · 696becb6
      Daniel P. Berrange 提交于
      If we send back an unknown program error for async messages,
      we will confuse the client because they only expect replies
      for method calls. Just log & drop any invalid async messages
      
      * src/rpc/virnetserver.c: Don't send error for async messages
      696becb6
    • D
      Fix deadlock when the RPC program is unknown · f399612c
      Daniel P. Berrange 提交于
      Commit 597fe3ce accidentally
      introduced a deadlock when reporting an unknown RPC program.
      The virNetServerDispatchNewMessage method is called with
      the client locked, and must therefore not attempt to send
      any RPC messages back to the client. Only once the incoming
      message is passed off to the virNetServerHandleJob worker
      is it safe to start sending messages back
      
      * src/rpc/virnetserver.c: Delay checking for unknown RPC
        program until in worker thread
      f399612c
  3. 06 9月, 2011 1 次提交
    • M
      daemon: Create priority workers pool · 597fe3ce
      Michal Privoznik 提交于
      This patch annotates APIs with low or high priority.
      In low set MUST be all APIs which might eventually access monitor
      (and thus block indefinitely). Other APIs may be marked as high
      priority. However, some must be (e.g. domainDestroy).
      
      For high priority calls (HPC), there are some high priority workers
      (HPW) created in the pool. HPW can execute only HPC, although normal
      worker can process any call regardless priority. Therefore, only those
      APIs which are guaranteed to end in reasonable small amount of time
      can be marked as HPC.
      
      The size of this HPC pool is static, because HPC are expected to end
      quickly, therefore jobs assigned to this pool will be served quickly.
      It can be configured in libvirtd.conf via prio_workers variable.
      Default is set to 5.
      
      To mark API with low or high priority, append priority:{low|high} to
      it's comment in src/remote/remote_protocol.x. This is similar to
      autogen|skipgen. If not marked, the generator assumes low as default.
      597fe3ce
  4. 26 8月, 2011 1 次提交
    • J
      rpc: Don't close connection if program is unknown · 22d744d0
      Jiri Denemark 提交于
      In case we add a new program in the future (we did that in the past and
      we are going to do it again soon) current daemon will behave badly with
      new client that wants to use the new program. Before the RPC rewrite we
      used to just send an error reply to any request with unknown program.
      With the RPC rewrite in 0.9.3 the daemon just closes the connection
      through which such request was sent. This patch fixes this regression.
      22d744d0
  5. 04 8月, 2011 1 次提交
  6. 03 8月, 2011 2 次提交
    • E
      rpc: silence coverity false positives · 0634b623
      Eric Blake 提交于
      In virNetServerNew, Coverity didn't realize that srv->mdsnGroupName
      can only be non-NULL if mdsnGroupName was non-NULL.
      
      In virNetServerRun, Coverity didn't realize that the array is non-NULL
      if the array count is non-zero.
      
      * src/rpc/virnetserver.c (virNetServerNew): Use alternate pointer.
      (virNetServerRun): Give coverity a hint.
      0634b623
    • E
      rpc: avoid double close on error · 50ae1de2
      Eric Blake 提交于
      Spotted by coverity.  If pipe2 fails, then we attempt to close
      uninitialized fds, which may result in a double-close.
      
      * src/rpc/virnetserver.c (virNetServerSignalSetup): Initialize fds.
      50ae1de2
  7. 26 7月, 2011 3 次提交
    • S
      Build: fix build if HAVE_AVAHI is not defined · f63930a7
      Stefan Berger 提交于
      Fix the build if HAVE_AVAHI is not defined.
      f63930a7
    • D
      Fix race in ref counting when handling RPC jobs · 0302391e
      Daniel P. Berrange 提交于
      When an incoming RPC message is ready for processing,
      
        virNetServerClientDispatchRead()
      
      will invoke the 'dispatchFunc' callback. This is set to
      
        virNetServerDispatchNewMessage
      
      This function puts the message + client in a queue for processing by the thread
      pool. The thread pool worker function is
      
        virNetServerHandleJob
      
      The first thing this does is acquire an extra reference on the 'client'.
      
      Unfortunately, between the time the message+client are put on the thread pool
      queue, and the time the worker runs, the client object may have had its last
      reference removed.
      
      We clearly need to add the reference to the client object before putting the
      client on the processing queue
      
      * src/rpc/virnetserverclient.c: Add a reference to the client when
        invoking the dispatch function
      * src/rpc/virnetserver.c: Don't acquire a reference to the client
        when in the worker thread
      0302391e
    • D
      Fix leak of mDNS object in virNetServer · 4bfd0cf7
      Daniel P. Berrange 提交于
      * src/rpc/virnetserver.c: Free mDNS object
      4bfd0cf7
  8. 22 7月, 2011 2 次提交
    • D
      Ensure that libvirtd shuts down if initialization fails · 92509413
      Daniel P. Berrange 提交于
      If the virStateInitialize call fails we must shutdown libvirtd
      since drivers will not be available. Just free'ing the virNetServer
      is not sufficient, we must send a SIGTERM to ourselves so that
      we interrupt the event loop and trigger a orderly shutdown
      
      * daemon/libvirtd.c: Kill ourselves if state init fails
      * src/rpc/virnetserver.c: Add some debugging to event loop
      92509413
    • E
      build: rename files.h to virfile.h · 8e22e089
      Eric Blake 提交于
      In preparation for a future patch adding new virFile APIs.
      
      * src/util/files.h, src/util/files.c: Move...
      * src/util/virfile.h, src/util/virfile.c: ...here, and rename
      functions to virFile prefix.  Macro names are intentionally
      left alone.
      * *.c: All '#include "files.h"' uses changed.
      * src/Makefile.am (UTIL_SOURCES): Reflect rename.
      * cfg.mk (exclude_file_name_regexp--sc_prohibit_close): Likewise.
      * src/libvirt_private.syms: Likewise.
      * docs/hacking.html.in: Likewise.
      * HACKING: Regenerate.
      8e22e089
  9. 13 7月, 2011 1 次提交
    • D
      Ensure signal handler propagates fatal signals to default handler · 83d768fa
      Daniel P. Berrange 提交于
      When replacing the default SEGV/ABORT/BUS signal handlers you
      can't rely on the process being terminated after your custom
      handler runs. It is neccessary to manually restore the default
      handler and then re-raise the signal
      
      * src/rpc/virnetserver.c: Restore default handler and raise
        signal
      83d768fa
  10. 12 7月, 2011 2 次提交
  11. 01 7月, 2011 2 次提交
  12. 24 6月, 2011 2 次提交
    • D
      Introduce generic RPC module for advertising via MDNS · e23ec81d
      Daniel P. Berrange 提交于
      Allow RPC servers to advertise themselves using MDNS,
      via Avahi
      
      * src/rpc/virnetserver.c, src/rpc/virnetserver.h: Allow
        registration of MDNS services via avahi
      * src/rpc/virnetserverservice.c, src/rpc/virnetserverservice.h: Add
        API to fetch the listen port number
      * src/rpc/virnetsocket.c, src/rpc/virnetsocket.h: Add API to
        fetch the local port number
      * src/rpc/virnetservermdns.c, src/rpc/virnetservermdns.h: Represent
        an MDNS advertisement
      e23ec81d
    • D
      Introduce generic RPC server objects · 4e00b1da
      Daniel P. Berrange 提交于
      To facilitate creation of new daemons providing XDR RPC services,
      pull a lot of the libvirtd daemon code into a set of reusable
      objects.
      
       * virNetServer: A server contains one or more services which
         accept incoming clients. It maintains the list of active
         clients. It has a list of RPC programs which can be used
         by clients. When clients produce a complete RPC message,
         the server passes this onto the corresponding program for
         handling, and queues any response back with the client.
      
       * virNetServerClient: Encapsulates a single client connection.
         All I/O for the client is handled, reading & writing RPC
         messages.
      
       * virNetServerProgram: Handles processing and dispatch of
         RPC method calls for a single RPC (program,version).
         Multiple programs can be registered with the server.
      
       * virNetServerService: Encapsulates socket(s) listening for
         new connections. Each service listens on a single host/port,
         but may have multiple sockets if on a dual IPv4/6 host.
      
      Each new daemon now merely has to define the list of RPC procedures
      & their handlers. It does not need to deal with any network related
      functionality at all.
      4e00b1da