Merge pull request 'piethernet threaded connect fix, small brush of PIIODevice' (#168) from piiodevice_fix into master
Reviewed-on: https://git.shs.tools/SHS/pip/pulls/168
This commit was merged in pull request #168.
This commit is contained in:
@@ -713,9 +713,12 @@ ssize_t PIEthernet::readDevice(void * read_to, ssize_t max_size) {
|
|||||||
#ifdef QNX
|
#ifdef QNX
|
||||||
PRIVATE->addr_.sin_len = sizeof(PRIVATE->addr_);
|
PRIVATE->addr_.sin_len = sizeof(PRIVATE->addr_);
|
||||||
#endif
|
#endif
|
||||||
//piCoutObj << "connect to " << ip_ << ":" << port_ << "...";
|
//piCout << "connect to " << path() << "...";
|
||||||
|
bool was_block_read_flag = blockingReadFlag();
|
||||||
|
setBlockingReadFlag(true);
|
||||||
connected_ = (::connect(sock, (sockaddr * )&(PRIVATE->addr_), sizeof(PRIVATE->addr_)) == 0);
|
connected_ = (::connect(sock, (sockaddr * )&(PRIVATE->addr_), sizeof(PRIVATE->addr_)) == 0);
|
||||||
//piCoutObj << "connect to " << ip_ << ":" << port_ << connected_;
|
setBlockingReadFlag(was_block_read_flag);
|
||||||
|
//piCout << "connect to " << path() << connected_;
|
||||||
if (!connected_)
|
if (!connected_)
|
||||||
piCoutObj << "Can`t connect to" << addr_r << "," << ethErrorString();
|
piCoutObj << "Can`t connect to" << addr_r << "," << ethErrorString();
|
||||||
opened_ = connected_;
|
opened_ = connected_;
|
||||||
|
|||||||
@@ -301,11 +301,6 @@ ssize_t PIIODevice::write(const void * data, ssize_t max_size) {
|
|||||||
|
|
||||||
void PIIODevice::_init() {
|
void PIIODevice::_init() {
|
||||||
reading_now = false;
|
reading_now = false;
|
||||||
opened_ = thread_started_ = false;
|
|
||||||
raise_threaded_read_ = true;
|
|
||||||
func_read = nullptr;
|
|
||||||
ret_data_ = nullptr;
|
|
||||||
tri = 0;
|
|
||||||
setOptions(0);
|
setOptions(0);
|
||||||
setReopenEnabled(true);
|
setReopenEnabled(true);
|
||||||
setReopenTimeout(1000);
|
setReopenTimeout(1000);
|
||||||
@@ -317,6 +312,7 @@ void PIIODevice::_init() {
|
|||||||
read_thread .setName("__S__.PIIODevice.read_thread" );
|
read_thread .setName("__S__.PIIODevice.read_thread" );
|
||||||
write_thread.setName("__S__.PIIODevice.write_thread");
|
write_thread.setName("__S__.PIIODevice.write_thread");
|
||||||
CONNECT(void, &write_thread, started, this, write_func);
|
CONNECT(void, &write_thread, started, this, write_func);
|
||||||
|
CONNECTL(&read_thread, started, [this](){if (!isOpened()) open();});
|
||||||
read_thread.setSlot([this](void*){read_func();});
|
read_thread.setSlot([this](void*){read_func();});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -345,6 +341,16 @@ PIIODevice * PIIODevice::newDeviceByPrefix(const char * prefix) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool PIIODevice::blockingReadFlag() const {
|
||||||
|
return reading_now;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PIIODevice::setBlockingReadFlag(bool yes) {
|
||||||
|
reading_now = yes;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void PIIODevice::read_func() {
|
void PIIODevice::read_func() {
|
||||||
if (!isReadable()) {
|
if (!isReadable()) {
|
||||||
read_thread.stop();
|
read_thread.stop();
|
||||||
@@ -361,7 +367,7 @@ void PIIODevice::read_func() {
|
|||||||
}
|
}
|
||||||
if (!ok) return;
|
if (!ok) return;
|
||||||
}
|
}
|
||||||
readed_ = read(buffer_tr.data(), buffer_tr.size_s());
|
ssize_t readed_ = read(buffer_tr.data(), buffer_tr.size_s());
|
||||||
if (readed_ <= 0) {
|
if (readed_ <= 0) {
|
||||||
piMSleep(10);
|
piMSleep(10);
|
||||||
//cout << readed_ << ", " << errno << ", " << errorString() << endl;
|
//cout << readed_ << ", " << errno << ", " << errorString() << endl;
|
||||||
@@ -369,7 +375,7 @@ void PIIODevice::read_func() {
|
|||||||
}
|
}
|
||||||
//piCoutObj << "readed" << readed_;// << ", " << errno << ", " << errorString();
|
//piCoutObj << "readed" << readed_;// << ", " << errno << ", " << errorString();
|
||||||
threadedRead(buffer_tr.data(), readed_);
|
threadedRead(buffer_tr.data(), readed_);
|
||||||
if (raise_threaded_read_) threadedReadEvent(buffer_tr.data(), readed_);
|
threadedReadEvent(buffer_tr.data(), readed_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -528,13 +528,15 @@ protected:
|
|||||||
virtual void threadedReadBufferSizeChanged() {;}
|
virtual void threadedReadBufferSizeChanged() {;}
|
||||||
|
|
||||||
static PIIODevice * newDeviceByPrefix(const char * prefix);
|
static PIIODevice * newDeviceByPrefix(const char * prefix);
|
||||||
|
bool blockingReadFlag() const;
|
||||||
|
void setBlockingReadFlag(bool yes);
|
||||||
|
|
||||||
|
|
||||||
DeviceMode mode_;
|
DeviceMode mode_;
|
||||||
DeviceOptions options_;
|
DeviceOptions options_;
|
||||||
ReadRetFunc func_read;
|
ReadRetFunc func_read = nullptr;
|
||||||
bool opened_;
|
bool opened_ = false;
|
||||||
void * ret_data_;
|
void * ret_data_ = nullptr;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
EVENT_HANDLER(void, read_func);
|
EVENT_HANDLER(void, read_func);
|
||||||
@@ -550,11 +552,10 @@ private:
|
|||||||
PIThread read_thread, write_thread;
|
PIThread read_thread, write_thread;
|
||||||
PIByteArray buffer_in, buffer_tr;
|
PIByteArray buffer_in, buffer_tr;
|
||||||
PIQueue<PIPair<PIByteArray, ullong> > write_queue;
|
PIQueue<PIPair<PIByteArray, ullong> > write_queue;
|
||||||
ullong tri;
|
ullong tri = 0;
|
||||||
ssize_t readed_;
|
|
||||||
uint threaded_read_buffer_size, reopen_timeout = 1000;
|
uint threaded_read_buffer_size, reopen_timeout = 1000;
|
||||||
std::atomic_bool reading_now;
|
std::atomic_bool reading_now;
|
||||||
bool thread_started_, raise_threaded_read_, reopen_enabled = true;
|
bool reopen_enabled = true;
|
||||||
|
|
||||||
static PIMutex nfp_mutex;
|
static PIMutex nfp_mutex;
|
||||||
static PIMap<PIString, PIString> nfp_cache;
|
static PIMap<PIString, PIString> nfp_cache;
|
||||||
|
|||||||
Reference in New Issue
Block a user