mirror of
https://github.com/wjwwood/serial.git
synced 2026-01-23 04:04:54 +08:00
Fixed some potential memory leaks. Also, added a possible fix for the PARTIY_NONE debackle.
This commit is contained in:
parent
1ca16c4701
commit
b2263a7875
@ -53,11 +53,24 @@
|
|||||||
TypeName(const TypeName&); \
|
TypeName(const TypeName&); \
|
||||||
void operator=(const TypeName&)
|
void operator=(const TypeName&)
|
||||||
|
|
||||||
|
// If on Windows undefine the PARITY_* defines that are in winbase.h
|
||||||
|
#ifdef PARTIY_NONE
|
||||||
|
#undef PARITY_NONE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef PARTIY_ODD
|
||||||
|
#undef PARITY_ODD
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef PARTIY_EVEN
|
||||||
|
#undef PARITY_EVEN
|
||||||
|
#endif
|
||||||
|
|
||||||
// DEFINES
|
// DEFINES
|
||||||
#define DEFAULT_BAUDRATE 9600
|
#define DEFAULT_BAUDRATE 9600
|
||||||
#define DEFAULT_TIMEOUT 0.0
|
#define DEFAULT_TIMEOUT 0.0
|
||||||
#define DEFAULT_BYTESIZE EIGHTBITS
|
#define DEFAULT_BYTESIZE EIGHTBITS
|
||||||
#define DEFAULT_PARITY NONE
|
#define DEFAULT_PARITY PARITY_NONE
|
||||||
#define DEFAULT_STOPBITS STOPBITS_ONE
|
#define DEFAULT_STOPBITS STOPBITS_ONE
|
||||||
#define DEFAULT_FLOWCONTROL FLOWCONTROL_NONE
|
#define DEFAULT_FLOWCONTROL FLOWCONTROL_NONE
|
||||||
|
|
||||||
|
|||||||
@ -159,6 +159,8 @@ void Serial::init() {
|
|||||||
|
|
||||||
Serial::~Serial() {
|
Serial::~Serial() {
|
||||||
this->close();
|
this->close();
|
||||||
|
if(this->timeout != NULL)
|
||||||
|
delete this->timeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Serial::open() {
|
void Serial::open() {
|
||||||
@ -185,8 +187,11 @@ void Serial::open() {
|
|||||||
void Serial::close() {
|
void Serial::close() {
|
||||||
// Cancel the current timeout timer and async reads
|
// Cancel the current timeout timer and async reads
|
||||||
this->timeout_timer.cancel();
|
this->timeout_timer.cancel();
|
||||||
|
if(this->serial_port != NULL) {
|
||||||
this->serial_port->cancel();
|
this->serial_port->cancel();
|
||||||
this->serial_port->close();
|
this->serial_port->close();
|
||||||
|
delete this->serial_port;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const int Serial::read(char* buffer, int size) {
|
const int Serial::read(char* buffer, int size) {
|
||||||
@ -219,7 +224,7 @@ const std::string Serial::read(int size) {
|
|||||||
char *serial_buffer = new char[size];
|
char *serial_buffer = new char[size];
|
||||||
int bytes_read_ = this->read(serial_buffer, size);
|
int bytes_read_ = this->read(serial_buffer, size);
|
||||||
std::string return_str(serial_buffer, (std::size_t)bytes_read_);
|
std::string return_str(serial_buffer, (std::size_t)bytes_read_);
|
||||||
delete serial_buffer;
|
delete[] serial_buffer;
|
||||||
return return_str;
|
return return_str;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -248,7 +253,7 @@ const int Serial::write(std::string data) {
|
|||||||
char *cstr = new char[data.size()+1];
|
char *cstr = new char[data.size()+1];
|
||||||
std::strcpy(cstr, data.c_str());
|
std::strcpy(cstr, data.c_str());
|
||||||
int bytes_wrote = this->write(cstr, data.length());
|
int bytes_wrote = this->write(cstr, data.length());
|
||||||
delete cstr;
|
delete[] cstr;
|
||||||
return bytes_wrote;
|
return bytes_wrote;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -277,6 +282,8 @@ void Serial::setTimeoutMilliseconds(long timeout) {
|
|||||||
if(timeout > 0) {
|
if(timeout > 0) {
|
||||||
this->timeout = new boost::posix_time::milliseconds(timeout);
|
this->timeout = new boost::posix_time::milliseconds(timeout);
|
||||||
} else {
|
} else {
|
||||||
|
if(this->timeout != NULL)
|
||||||
|
delete this->timeout;
|
||||||
this->timeout = NULL;
|
this->timeout = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user