[haiku-commits] haiku: hrev49348 - in src: apps/cortex/NodeManager add-ons/print/transports/hp_jetdirect add-ons/kernel/file_systems/userlandfs/server/beos kits/tracker

  • From: stpere@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 2 Jul 2015 01:39:13 +0200 (CEST)

hrev49348 adds 4 changesets to branch 'master'
old head: 82652e65f720e02ed65f59754efc65e674a0ace2
new head: 93bd491fb75dd3b0d83d3fe99bc1ecfc8ad07934
overview:
http://cgit.haiku-os.org/haiku/log/?qt=range&q=93bd491fb75d+%5E82652e65f720

----------------------------------------------------------------------------

385d90724e7e: Memory leaks in Cortex

CID 605755, 605756, 605757 and 605758.

ee1265c58e79: Memleak in HPDirectJet printer transport

CID 605747

2bdea08d381c: Check for malloc result done on wrong variable.

CID 1255090

93bd491fb75d: Logic error in TaskLoop::RunIfNeeded()

The ! operator would have priority over < and would transform currentTime
before the
comparison. Moreso, the logic was reversed. It is supposed to return false if
it's
not time yet to run the task, not the opposite.

CID 1273447.

[ Philippe Saint-Pierre <stpere@xxxxxxxxx> ]

----------------------------------------------------------------------------

5 files changed, 38 insertions(+), 24 deletions(-)
.../userlandfs/server/beos/fs_cache.c | 4 +-
.../hp_jetdirect/HPJetDirectTransport.cpp | 6 ++-
.../transports/hp_jetdirect/SetupWindow.cpp | 10 +++--
src/apps/cortex/NodeManager/NodeRef.cpp | 40 ++++++++++++--------
src/kits/tracker/TaskLoop.cpp | 2 +-

############################################################################

Commit: 385d90724e7e09001c3649afdce38ea8cd800ba0
URL: http://cgit.haiku-os.org/haiku/commit/?id=385d90724e7e
Author: Philippe Saint-Pierre <stpere@xxxxxxxxx>
Date: Wed Jul 1 21:29:38 2015 UTC

Memory leaks in Cortex

CID 605755, 605756, 605757 and 605758.

----------------------------------------------------------------------------

diff --git a/src/apps/cortex/NodeManager/NodeRef.cpp
b/src/apps/cortex/NodeManager/NodeRef.cpp
index abe0275..94aba19 100644
--- a/src/apps/cortex/NodeManager/NodeRef.cpp
+++ b/src/apps/cortex/NodeManager/NodeRef.cpp
@@ -996,13 +996,15 @@ status_t NodeRef::getFreeInputs(
int32 inputBufferSize = 16;
media_input* inputBuffer = new media_input[inputBufferSize];

- while(true) {
+ while (true) {
err = r->GetFreeInputsFor(
m_info.node, inputBuffer, inputBufferSize, &count,
filterType);
- if(err < B_OK)
+ if (err < B_OK) {
+ delete [] inputBuffer;
return err;
+ }

- if(count == inputBufferSize) {
+ if (count == inputBufferSize) {
// buffer too small; increase & try again
inputBufferSize += bufferInc;
delete [] inputBuffer;
@@ -1010,7 +1012,7 @@ status_t NodeRef::getFreeInputs(
continue;
}

- if(count)
+ if (count)
// copy found inputs into vector
copy(inputBuffer, inputBuffer + count,
back_inserter(ioInputs));
@@ -1038,13 +1040,15 @@ status_t NodeRef::getConnectedInputs(
int32 inputBufferSize = 16;
media_input* inputBuffer = new media_input[inputBufferSize];

- while(true) {
+ while (true) {
err = r->GetConnectedInputsFor(
m_info.node, inputBuffer, inputBufferSize, &count);
- if(err < B_OK)
+ if (err < B_OK) {
+ delete [] inputBuffer;
return err;
+ }

- if(count == inputBufferSize) {
+ if (count == inputBufferSize) {
// buffer too small; increase & try again
inputBufferSize += bufferInc;
delete [] inputBuffer;
@@ -1052,7 +1056,7 @@ status_t NodeRef::getConnectedInputs(
continue;
}

- if(count)
+ if (count)
// copy found inputs matching the given type into vector
remove_copy_if(inputBuffer, inputBuffer + count,
back_inserter(ioInputs),
@@ -1080,13 +1084,15 @@ status_t NodeRef::getFreeOutputs(
int32 outputBufferSize = 16;
media_output* outputBuffer = new media_output[outputBufferSize];

- while(true) {
+ while (true) {
err = r->GetFreeOutputsFor(
m_info.node, outputBuffer, outputBufferSize, &count,
filterType);
- if(err < B_OK)
+ if (err < B_OK) {
+ delete [] outputBuffer;
return err;
+ }

- if(count == outputBufferSize) {
+ if (count == outputBufferSize) {
// buffer too small; increase & try again
outputBufferSize += bufferInc;
delete [] outputBuffer;
@@ -1094,7 +1100,7 @@ status_t NodeRef::getFreeOutputs(
continue;
}

- if(count)
+ if (count)
// copy found outputs into vector
copy(outputBuffer, outputBuffer + count,
back_inserter(ioOutputs));
@@ -1121,13 +1127,15 @@ status_t NodeRef::getConnectedOutputs(
int32 outputBufferSize = 16;
media_output* outputBuffer = new media_output[outputBufferSize];

- while(true) {
+ while (true) {
err = r->GetConnectedOutputsFor(
m_info.node, outputBuffer, outputBufferSize, &count);
- if(err < B_OK)
+ if (err < B_OK) {
+ delete [] outputBuffer;
return err;
+ }

- if(count == outputBufferSize) {
+ if (count == outputBufferSize) {
// buffer too small; increase & try again
outputBufferSize += bufferInc;
delete [] outputBuffer;
@@ -1135,7 +1143,7 @@ status_t NodeRef::getConnectedOutputs(
continue;
}

- if(count)
+ if (count)
// copy found outputs matching the given type into
vector
remove_copy_if(outputBuffer, outputBuffer + count,
back_inserter(ioOutputs),

############################################################################

Commit: ee1265c58e793a549675a5159a28c1e36e9bf320
URL: http://cgit.haiku-os.org/haiku/commit/?id=ee1265c58e79
Author: Philippe Saint-Pierre <stpere@xxxxxxxxx>
Date: Wed Jul 1 22:32:29 2015 UTC

Memleak in HPDirectJet printer transport

CID 605747

----------------------------------------------------------------------------

diff --git a/src/add-ons/print/transports/hp_jetdirect/HPJetDirectTransport.cpp
b/src/add-ons/print/transports/hp_jetdirect/HPJetDirectTransport.cpp
index 71f3f72..7ade202 100644
--- a/src/add-ons/print/transports/hp_jetdirect/HPJetDirectTransport.cpp
+++ b/src/add-ons/print/transports/hp_jetdirect/HPJetDirectTransport.cpp
@@ -52,11 +52,13 @@ HPJetDirectPort::HPJetDirectPort(BDirectory* printer,
BMessage *msg)
printf("fPort = %d\n", fPort);


- fEndpoint = new BNetEndpoint(SOCK_STREAM);
- if ((fReady = fEndpoint->InitCheck()) != B_OK) {
+ fEndpoint = new(std::nothrow) BNetEndpoint(SOCK_STREAM);
+ if (fEndpoint == NULL || (fReady = fEndpoint->InitCheck()) != B_OK) {
BAlert *alert = new BAlert("", "Fail to create the
NetEndpoint!", "OK");
alert->SetFlags(alert->Flags() | B_CLOSE_ON_ESCAPE);
alert->Go();
+ delete fEndpoint;
+ fEndpoint = NULL;
return;
}

diff --git a/src/add-ons/print/transports/hp_jetdirect/SetupWindow.cpp
b/src/add-ons/print/transports/hp_jetdirect/SetupWindow.cpp
index 6a2f89f..b0f8314 100644
--- a/src/add-ons/print/transports/hp_jetdirect/SetupWindow.cpp
+++ b/src/add-ons/print/transports/hp_jetdirect/SetupWindow.cpp
@@ -126,8 +126,8 @@ bool
SetupView::CheckSetup()
{
if (*fServerAddress->Text() && *fQueuePort->Text()) {
- BNetEndpoint* ep = new BNetEndpoint(SOCK_STREAM);
- if (ep->InitCheck() == B_NO_ERROR) {
+ BNetEndpoint* ep = new(std::nothrow) BNetEndpoint(SOCK_STREAM);
+ if (ep != NULL && ep->InitCheck() == B_NO_ERROR) {
uint16 port = atoi(fQueuePort->Text());

if (! port)
@@ -135,10 +135,12 @@ SetupView::CheckSetup()

if (ep->Connect(fServerAddress->Text(), port) != B_OK) {
BString text;
- text << "Failed to connect to " <<
fServerAddress->Text() << ":" << (int) port << "!";
+ text << "Failed to connect to " <<
fServerAddress->Text()
+ << ":" << (int) port << "!";
BAlert* alert = new BAlert("", text.String(),
"OK");
alert->SetFlags(alert->Flags() |
B_CLOSE_ON_ESCAPE);
alert->Go();
+ delete ep;
return false;
};

@@ -146,8 +148,10 @@ SetupView::CheckSetup()
sprintf(str, "%s:%d", fServerAddress->Text(), port);
fPrinterDirectory->WriteAttr("transport_address",
B_STRING_TYPE,
0, str, strlen(str) + 1);
+ delete ep;
return true;
};
+ delete ep;
};

BAlert* alert = new BAlert("", "Please input parameters.", "OK");

############################################################################

Commit: 2bdea08d381c8689d7e132c5091d13a0abb4fb97
URL: http://cgit.haiku-os.org/haiku/commit/?id=2bdea08d381c
Author: Philippe Saint-Pierre <stpere@xxxxxxxxx>
Date: Wed Jul 1 22:49:32 2015 UTC

Check for malloc result done on wrong variable.

CID 1255090

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/file_systems/userlandfs/server/beos/fs_cache.c
b/src/add-ons/kernel/file_systems/userlandfs/server/beos/fs_cache.c
index 6d7fcac..b4aee0d 100644
--- a/src/add-ons/kernel/file_systems/userlandfs/server/beos/fs_cache.c
+++ b/src/add-ons/kernel/file_systems/userlandfs/server/beos/fs_cache.c
@@ -464,7 +464,7 @@ get_iovec_array(void)

LOCK(iovec_lock);

- for(i=0; i < MAX_IOVECS; i++) {
+ for(i = 0; i < MAX_IOVECS; i++) {
if (iovec_used[i] == 0)
break;
}
@@ -475,7 +475,7 @@ get_iovec_array(void)

if (iovec_pool[i] == NULL) {
iovec_pool[i] = (struct iovec *)malloc(sizeof(struct
iovec)*NUM_FLUSH_BLOCKS);
- if (iovec_pool == NULL)
+ if (iovec_pool[i] == NULL)
beos_panic("can't allocate an iovec!\n");
}


############################################################################

Revision: hrev49348
Commit: 93bd491fb75dd3b0d83d3fe99bc1ecfc8ad07934
URL: http://cgit.haiku-os.org/haiku/commit/?id=93bd491fb75d
Author: Philippe Saint-Pierre <stpere@xxxxxxxxx>
Date: Wed Jul 1 23:22:24 2015 UTC

Logic error in TaskLoop::RunIfNeeded()

The ! operator would have priority over < and would transform currentTime
before the
comparison. Moreso, the logic was reversed. It is supposed to return false if
it's
not time yet to run the task, not the opposite.

CID 1273447.

----------------------------------------------------------------------------

diff --git a/src/kits/tracker/TaskLoop.cpp b/src/kits/tracker/TaskLoop.cpp
index 122f440..482b09e 100644
--- a/src/kits/tracker/TaskLoop.cpp
+++ b/src/kits/tracker/TaskLoop.cpp
@@ -181,7 +181,7 @@ PeriodicDelayedTask::~PeriodicDelayedTask()
bool
PeriodicDelayedTask::RunIfNeeded(bigtime_t currentTime)
{
- if (!currentTime < fRunAfter)
+ if (currentTime < fRunAfter)
return false;

fRunAfter = currentTime + fPeriod;


Other related posts:

  • » [haiku-commits] haiku: hrev49348 - in src: apps/cortex/NodeManager add-ons/print/transports/hp_jetdirect add-ons/kernel/file_systems/userlandfs/server/beos kits/tracker - stpere