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
|
||||
PRIVATE->addr_.sin_len = sizeof(PRIVATE->addr_);
|
||||
#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);
|
||||
//piCoutObj << "connect to " << ip_ << ":" << port_ << connected_;
|
||||
setBlockingReadFlag(was_block_read_flag);
|
||||
//piCout << "connect to " << path() << connected_;
|
||||
if (!connected_)
|
||||
piCoutObj << "Can`t connect to" << addr_r << "," << ethErrorString();
|
||||
opened_ = connected_;
|
||||
|
||||
@@ -301,11 +301,6 @@ ssize_t PIIODevice::write(const void * data, ssize_t max_size) {
|
||||
|
||||
void PIIODevice::_init() {
|
||||
reading_now = false;
|
||||
opened_ = thread_started_ = false;
|
||||
raise_threaded_read_ = true;
|
||||
func_read = nullptr;
|
||||
ret_data_ = nullptr;
|
||||
tri = 0;
|
||||
setOptions(0);
|
||||
setReopenEnabled(true);
|
||||
setReopenTimeout(1000);
|
||||
@@ -317,6 +312,7 @@ void PIIODevice::_init() {
|
||||
read_thread .setName("__S__.PIIODevice.read_thread" );
|
||||
write_thread.setName("__S__.PIIODevice.write_thread");
|
||||
CONNECT(void, &write_thread, started, this, write_func);
|
||||
CONNECTL(&read_thread, started, [this](){if (!isOpened()) open();});
|
||||
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() {
|
||||
if (!isReadable()) {
|
||||
read_thread.stop();
|
||||
@@ -361,7 +367,7 @@ void PIIODevice::read_func() {
|
||||
}
|
||||
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) {
|
||||
piMSleep(10);
|
||||
//cout << readed_ << ", " << errno << ", " << errorString() << endl;
|
||||
@@ -369,7 +375,7 @@ void PIIODevice::read_func() {
|
||||
}
|
||||
//piCoutObj << "readed" << readed_;// << ", " << errno << ", " << errorString();
|
||||
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() {;}
|
||||
|
||||
static PIIODevice * newDeviceByPrefix(const char * prefix);
|
||||
bool blockingReadFlag() const;
|
||||
void setBlockingReadFlag(bool yes);
|
||||
|
||||
|
||||
DeviceMode mode_;
|
||||
DeviceOptions options_;
|
||||
ReadRetFunc func_read;
|
||||
bool opened_;
|
||||
void * ret_data_;
|
||||
ReadRetFunc func_read = nullptr;
|
||||
bool opened_ = false;
|
||||
void * ret_data_ = nullptr;
|
||||
|
||||
private:
|
||||
EVENT_HANDLER(void, read_func);
|
||||
@@ -550,11 +552,10 @@ private:
|
||||
PIThread read_thread, write_thread;
|
||||
PIByteArray buffer_in, buffer_tr;
|
||||
PIQueue<PIPair<PIByteArray, ullong> > write_queue;
|
||||
ullong tri;
|
||||
ssize_t readed_;
|
||||
ullong tri = 0;
|
||||
uint threaded_read_buffer_size, reopen_timeout = 1000;
|
||||
std::atomic_bool reading_now;
|
||||
bool thread_started_, raise_threaded_read_, reopen_enabled = true;
|
||||
bool reopen_enabled = true;
|
||||
|
||||
static PIMutex nfp_mutex;
|
||||
static PIMap<PIString, PIString> nfp_cache;
|
||||
|
||||
Reference in New Issue
Block a user