All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laszlo Ersek <lersek@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: "libaiqing@huawei.com" <libaiqing@huawei.com>,
	"mdroth@linux.vnet.ibm.com" <mdroth@linux.vnet.ibm.com>,
	"stefanha@gmail.com" <stefanha@gmail.com>,
	"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
	"lcapitulino@redhat.com" <lcapitulino@redhat.com>,
	"vrozenfe@redhat.com" <vrozenfe@redhat.com>,
	Tomoki Sekiyama <tomoki.sekiyama@hds.com>,
	Seiji Aguchi <seiji.aguchi@hds.com>,
	"areis@redhat.com" <areis@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v4 06/10] qemu-ga: Add Windows VSS provider to quiesce applications on fsfreeze
Date: Fri, 28 Jun 2013 12:40:26 +0200	[thread overview]
Message-ID: <51CD681A.6030500@redhat.com> (raw)
In-Reply-To: <51CD35C4.5000802@redhat.com>

On 06/28/13 09:05, Paolo Bonzini wrote:
> Il 28/06/2013 00:25, Tomoki Sekiyama ha scritto:
>>>>>>>>>> +STDMETHODIMP CQGAVssProviderFactory::CreateInstance(
>>>>>>>>>> +    IUnknown *pUnknownOuter, REFIID iid, void **ppv)
>>>>>>>>>> +{
>>>>>>>>>> +    if (pUnknownOuter) {
>>>>>>>>>> +        return CLASS_E_NOAGGREGATION;
>>>>>>>>>> +    }
>>>>>>>>>> +    CQGAVssProvider *pObj = new CQGAVssProvider;
>>>>>>>>>> +    if (!pObj) {
>>>>>>>>>> +        return E_OUTOFMEMORY;
>>>>>>>>>> +    }
>>>>
>>>> (We generally assume that memory allocation never fails.)
>> Ah, OK...
> 
> Actually, we do because we use g_malloc/g_free.  The functions exit on
> memory allocation failure.  I'm not sure the same is true of the new
> operator... doesn't it throw an exception on allocation failure (that's
> what I vaguely remember)?

It throws std::bad_alloc on failure. There's another new operator (the
nothrow form) thar returns 0 on failure.

  18.4.1.1 Single-object forms [lib.new.delete.single]; p9:

    [Example:
      T* p1 = new T;          // throws bad_alloc if it fails
      T* p2 = new(nothrow) T; // returns 0 if it fails
    —end example]

(
"nothrow" in the above is std::nothrow, an object with static storage
duration, of type "nothrow_t" -- it's a dummy argument so that operator
new() can have to prototypes. It is passed by const reference.

  18.4 Dynamic memory management [lib.support.dynamic]; p1:

  namespace std {
    class bad_alloc;
    struct nothrow_t {};
    extern const nothrow_t nothrow;
    /* ... */
  }

  void* operator new(std::size_t size) throw(std::bad_alloc);
  void* operator new(std::size_t size, const std::nothrow_t&) throw();
)

As far as I can remember, older C++ implementations had problems with
bad_alloc. I believe though that any gcc release frome after the stone
age should handle this correctly; see also -fcheck-new.

Of course I have no idea what happens when a C++ exception tries to
propagate past a "DLL boundary".


> Also, this is not running in the context of qemu-ga, so I think it is
> better to be more conservative and trap memory allocation failure.

In that case other "new" calls must assume the nothrow form too, plus
other allocation functions should be checked as well (eg.
SysAllocStringLen(), although its only use might be in the function that
Tomoki plans to remove anyway).

Laszlo

  reply	other threads:[~2013-06-28 10:38 UTC|newest]

Thread overview: 70+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-06 15:06 [Qemu-devel] [PATCH v4 00/10] qemu-ga: fsfreeze on Windows using VSS Tomoki Sekiyama
2013-06-06 15:06 ` [Qemu-devel] [PATCH v4 01/10] configure: Support configuring c++ compiler Tomoki Sekiyama
2013-06-18 10:17   ` Paolo Bonzini
2013-06-25  8:15   ` Laszlo Ersek
2013-06-06 15:06 ` [Qemu-devel] [PATCH v4 02/10] Add c++ keywords to QAPI helper script Tomoki Sekiyama
2013-06-25  8:16   ` Laszlo Ersek
2013-06-06 15:06 ` [Qemu-devel] [PATCH v4 03/10] checkpatch.pl: check .cpp files Tomoki Sekiyama
2013-06-25  8:17   ` Laszlo Ersek
2013-06-06 15:06 ` [Qemu-devel] [PATCH v4 04/10] Add a script to extract VSS SDK headers on POSIX system Tomoki Sekiyama
2013-06-25  8:30   ` Laszlo Ersek
2013-06-25 15:01   ` Laszlo Ersek
2013-06-25 15:01     ` Paolo Bonzini
2013-06-26 10:52       ` Laszlo Ersek
2013-06-06 15:06 ` [Qemu-devel] [PATCH v4 05/10] qemu-ga: Add configure options to specify path to Windows/VSS SDK Tomoki Sekiyama
2013-06-25 11:16   ` Laszlo Ersek
2013-06-28 10:43     ` Daniel P. Berrange
2013-06-28 10:54       ` Paolo Bonzini
2013-06-28 11:01         ` Daniel P. Berrange
2013-06-28 11:18           ` Paolo Bonzini
2013-06-28 11:30             ` Daniel P. Berrange
2013-06-28 12:18               ` Paolo Bonzini
2013-06-28 11:05       ` Laszlo Ersek
2013-06-06 15:06 ` [Qemu-devel] [PATCH v4 06/10] qemu-ga: Add Windows VSS provider to quiesce applications on fsfreeze Tomoki Sekiyama
2013-06-25 16:03   ` Laszlo Ersek
2013-06-25 16:19     ` Paolo Bonzini
2013-06-25 18:23     ` Tomoki Sekiyama
2013-06-25 18:59       ` Paolo Bonzini
2013-06-25 19:28         ` Tomoki Sekiyama
2013-06-25 19:52       ` Laszlo Ersek
2013-06-26 14:32     ` Laszlo Ersek
2013-06-26 21:27       ` Paolo Bonzini
2013-06-26 22:09       ` Tomoki Sekiyama
2013-06-27 15:01       ` Laszlo Ersek
2013-06-27 22:25         ` Tomoki Sekiyama
2013-06-28  7:05           ` Paolo Bonzini
2013-06-28 10:40             ` Laszlo Ersek [this message]
2013-06-28 10:40               ` Paolo Bonzini
2013-06-28 17:18                 ` Tomoki Sekiyama
2013-06-28 10:44           ` Laszlo Ersek
2013-06-25 21:15   ` Paolo Bonzini
2013-06-25 22:31     ` Tomoki Sekiyama
2013-06-26  5:59       ` Paolo Bonzini
2013-06-26 14:13         ` Tomoki Sekiyama
2013-06-30 13:16       ` Gal Hammer
2013-07-01 18:57         ` Tomoki Sekiyama
2013-07-02 12:36           ` Gal Hammer
2013-06-06 15:06 ` [Qemu-devel] [PATCH v4 07/10] qemu-ga: Add Windows VSS requester to quiesce applications and filesystems Tomoki Sekiyama
2013-06-28 18:01   ` Laszlo Ersek
2013-06-28 18:34     ` Laszlo Ersek
2013-06-30  1:21     ` Tomoki Sekiyama
2013-07-01  8:31       ` Laszlo Ersek
2013-06-06 15:06 ` [Qemu-devel] [PATCH v4 08/10] qemu-ga: call Windows VSS requester in fsfreeze command handler Tomoki Sekiyama
2013-07-01 13:29   ` Laszlo Ersek
2013-07-01 17:48     ` Eric Blake
2013-07-01 17:59     ` Tomoki Sekiyama
2013-07-02  6:36       ` Laszlo Ersek
2013-07-02 14:09         ` Luiz Capitulino
2013-07-02 14:44           ` Laszlo Ersek
2013-07-02 15:16             ` Luiz Capitulino
2013-07-02 15:28               ` Laszlo Ersek
2013-07-02 14:58         ` Michael Roth
2013-06-06 15:06 ` [Qemu-devel] [PATCH v4 09/10] qemu-ga: install Windows VSS provider on `qemu-ga -s install' Tomoki Sekiyama
2013-07-01 14:50   ` Laszlo Ersek
2013-07-01 17:59     ` Tomoki Sekiyama
2013-06-06 15:07 ` [Qemu-devel] [PATCH v4 10/10] QMP/qemu-ga-client: make timeout longer for guest-fsfreeze-freeze command Tomoki Sekiyama
2013-06-18 10:17   ` Paolo Bonzini
2013-07-01 15:02   ` Laszlo Ersek
2013-06-10  9:26 ` [Qemu-devel] [PATCH v4 00/10] qemu-ga: fsfreeze on Windows using VSS Stefan Hajnoczi
2013-06-24 19:30 ` Tomoki Sekiyama
2013-06-24 21:13   ` Laszlo Ersek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51CD681A.6030500@redhat.com \
    --to=lersek@redhat.com \
    --cc=areis@redhat.com \
    --cc=lcapitulino@redhat.com \
    --cc=libaiqing@huawei.com \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=seiji.aguchi@hds.com \
    --cc=stefanha@gmail.com \
    --cc=tomoki.sekiyama@hds.com \
    --cc=vrozenfe@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.