* Use new (std::nothrow), check for out of memory conditions and report them.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24557 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -34,6 +34,8 @@ char __dont_remove_copyright_from_binary[] = "Copyright (c) 2002-2006 Marcus "
|
|||||||
//#define DEBUG 7
|
//#define DEBUG 7
|
||||||
#include <MediaRoster.h>
|
#include <MediaRoster.h>
|
||||||
|
|
||||||
|
#include <new>
|
||||||
|
|
||||||
#include <Locker.h>
|
#include <Locker.h>
|
||||||
#include <Message.h>
|
#include <Message.h>
|
||||||
#include <Messenger.h>
|
#include <Messenger.h>
|
||||||
@@ -1951,8 +1953,10 @@ BMediaRoster::Roster(status_t *out_error)
|
|||||||
*out_error = B_OK;
|
*out_error = B_OK;
|
||||||
if (_sDefault == NULL) {
|
if (_sDefault == NULL) {
|
||||||
status_t err;
|
status_t err;
|
||||||
_sDefault = new BMediaRosterEx(&err);
|
_sDefault = new (std::nothrow) BMediaRosterEx(&err);
|
||||||
if (err != B_OK) {
|
if (_sDefault == NULL)
|
||||||
|
err = B_NO_MEMORY;
|
||||||
|
else if (err != B_OK) {
|
||||||
if (_sDefault) {
|
if (_sDefault) {
|
||||||
_sDefault->Lock();
|
_sDefault->Lock();
|
||||||
_sDefault->Quit();
|
_sDefault->Quit();
|
||||||
@@ -2061,26 +2065,27 @@ BMediaRoster::GetParameterWebFor(const media_node & node,
|
|||||||
// no parameter web available
|
// no parameter web available
|
||||||
// XXX should we return an error?
|
// XXX should we return an error?
|
||||||
ERROR("BMediaRoster::GetParameterWebFor node %ld has no parameter web\n", node.node);
|
ERROR("BMediaRoster::GetParameterWebFor node %ld has no parameter web\n", node.node);
|
||||||
*out_web = new BParameterWeb();
|
*out_web = new (std::nothrow) BParameterWeb();
|
||||||
delete_area(area);
|
delete_area(area);
|
||||||
return B_OK;
|
return *out_web != NULL ? B_OK : B_NO_MEMORY;
|
||||||
}
|
}
|
||||||
if (reply.size > 0) {
|
if (reply.size > 0) {
|
||||||
// we got a flattened parameter web!
|
// we got a flattened parameter web!
|
||||||
*out_web = new BParameterWeb();
|
*out_web = new (std::nothrow) BParameterWeb();
|
||||||
|
if (*out_web == NULL)
|
||||||
printf("BMediaRoster::GetParameterWebFor Unflattening %ld bytes, 0x%08lx, 0x%08lx, 0x%08lx, 0x%08lx\n",
|
rv = B_NO_MEMORY;
|
||||||
reply.size, ((uint32*)data)[0], ((uint32*)data)[1], ((uint32*)data)[2], ((uint32*)data)[3]);
|
else {
|
||||||
|
printf("BMediaRoster::GetParameterWebFor Unflattening %ld bytes, 0x%08lx, 0x%08lx, 0x%08lx, 0x%08lx\n",
|
||||||
rv = (*out_web)->Unflatten(reply.code, data, reply.size);
|
reply.size, ((uint32*)data)[0], ((uint32*)data)[1], ((uint32*)data)[2], ((uint32*)data)[3]);
|
||||||
|
|
||||||
|
rv = (*out_web)->Unflatten(reply.code, data, reply.size);
|
||||||
|
}
|
||||||
if (rv != B_OK) {
|
if (rv != B_OK) {
|
||||||
ERROR("BMediaRoster::GetParameterWebFor Unflatten failed, %s\n", strerror(rv));
|
ERROR("BMediaRoster::GetParameterWebFor Unflatten failed, %s\n", strerror(rv));
|
||||||
delete_area(area);
|
|
||||||
delete *out_web;
|
delete *out_web;
|
||||||
return B_ERROR;
|
|
||||||
}
|
}
|
||||||
delete_area(area);
|
delete_area(area);
|
||||||
return B_OK;
|
return rv;
|
||||||
}
|
}
|
||||||
delete_area(area);
|
delete_area(area);
|
||||||
ASSERT(reply.size == -1);
|
ASSERT(reply.size == -1);
|
||||||
|
|||||||
Reference in New Issue
Block a user