<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Writing to the serial port crashes my application]]></title><description><![CDATA[<p dir="auto">Debug Trace leads me to below mentioned call<br />
// return write(data.constData(), data.size());<br />
mostly looks like the QByteArray issue. This issue happens 3 out of 5 times</p>
<p dir="auto">Qt Version used Qt 5.3.0 MinGW 32bit</p>
<p dir="auto">Any solution to this?? Thanks!</p>
]]></description><link>https://forum.qt.io/topic/101330/writing-to-the-serial-port-crashes-my-application</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Apr 2026 15:26:24 GMT</lastBuildDate><atom:link href="https://forum.qt.io/topic/101330.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 02 Apr 2019 10:07:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Writing to the serial port crashes my application on Wed, 03 Apr 2019 12:27:32 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/kuzulis">@<bdi>kuzulis</bdi></a><br />
You yourself pitched into, I didn't ask for your help. Neways Thanks</p>
]]></description><link>https://forum.qt.io/post/520984</link><guid isPermaLink="true">https://forum.qt.io/post/520984</guid><dc:creator><![CDATA[asthana]]></dc:creator><pubDate>Wed, 03 Apr 2019 12:27:32 GMT</pubDate></item><item><title><![CDATA[Reply to Writing to the serial port crashes my application on Wed, 03 Apr 2019 12:14:06 GMT]]></title><description><![CDATA[<p dir="auto">I don't want to understand your code, you should do it himself, sorry.</p>
]]></description><link>https://forum.qt.io/post/520981</link><guid isPermaLink="true">https://forum.qt.io/post/520981</guid><dc:creator><![CDATA[kuzulis]]></dc:creator><pubDate>Wed, 03 Apr 2019 12:14:06 GMT</pubDate></item><item><title><![CDATA[Reply to Writing to the serial port crashes my application on Wed, 03 Apr 2019 10:29:52 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/kuzulis">@<bdi>kuzulis</bdi></a> said in <a href="/post/520953">Writing to the serial port crashes my application</a>:</p>
<blockquote>
<p dir="auto">QThread::currentThreadId()</p>
</blockquote>
<p dir="auto">I hope that I am not making any mistake, please find the code for your reference</p>
<ol>
<li>
<p dir="auto">//Created in the constructor of the SerialPortManager Class</p>
<p dir="auto">// do the control serial port reading in a thread<br />
Worker* readCtrl = new Worker(this);<br />
readCtrl-&gt;moveToThread(&amp;readThreadControl);<br />
connect(&amp;readThreadControl, &amp;QThread::finished, readCtrl, &amp;QObject::deleteLater);<br />
connect(this, SIGNAL(startCtrlRead()), readCtrl,SLOT(readFromControlPort()));<br />
readThreadControl.start();</p>
<p dir="auto">// do the control serial port writing in a thread<br />
Worker* writeCtrl = new Worker(this);<br />
writeCtrl-&gt;moveToThread(&amp;writeThreadControl);<br />
connect(&amp;writeThreadControl, &amp;QThread::finished, writeCtrl, &amp;QObject::deleteLater);<br />
connect(this, SIGNAL(startCtrlWrite()), writeCtrl,SLOT(writeToControlPort()));<br />
writeThreadControl.start();</p>
</li>
</ol>
<p dir="auto">So here are two threads created on for read and write</p>
<p dir="auto"><em><strong>How read works</strong></em></p>
<p dir="auto"><strong>1</strong>.Main Thread has a connect call that listens to any data coming to the serial port<br />
connect(controlPort, SIGNAL(readyRead()), this, SLOT(readDataFromCtrl()));</p>
<p dir="auto"><strong>2.</strong> void SerialPortManager::readDataFromCtrl()<br />
{ emit startCtrlRead();}</p>
<p dir="auto">Here at this point read worker thread is called.</p>
<p dir="auto"><strong>3.</strong> void Worker::readFromControlPort()<br />
{<br />
if( mSerialManager-&gt;controlPort != NULL)<br />
{<br />
QByteArray data = mSerialManager-&gt;controlPort-&gt;readAll();<br />
Datamanager::getInstance()-&gt;addToInQueueCtrl(data);<br />
}<br />
}<br />
4.void Datamanager::addToInQueueCtrl(QByteArray msgData)<br />
{<br />
mInQueueCtrl.append(msgData);<br />
emit inQueueCtrlHasItem();<br />
}<br />
So from here we can read the data from the queue</p>
<p dir="auto"><em><strong>How Write works</strong></em></p>
<ol>
<li>
<p dir="auto">The data is framed and added to the write queue.<br />
Datamanager::getInstance()-&gt;addToOutQueueCtrl(msgData);</p>
</li>
<li>
<p dir="auto">addToOutQueueCtrl() emits the signal which is handled by the write worker thread and SLOT writeToControlPort() is called .</p>
</li>
<li>
<p dir="auto">void Datamanager::addToOutQueueCtrl(QByteArray msgData)<br />
{<br />
mOutQueueCtrl.append(msgData);<br />
emit outQueueCtrlHasItem();<br />
}</p>
</li>
<li>
<p dir="auto">connect(Datamanager::getInstance(),SIGNAL(outQueueCtrlHasItem()),<br />
serialPortManager,SLOT(writeDataToCtrl()));</p>
</li>
<li>
<p dir="auto">void SerialPortManager::writeDataToCtrl()<br />
{<br />
emit startCtrlWrite();<br />
}</p>
</li>
<li>
<p dir="auto">Here is what write worker thread executes the SLOT and write the data to port</p>
</li>
<li>
<p dir="auto">void Worker::writeToControlPort()<br />
{<br />
if( mSerialManager-&gt;controlPort != NULL)<br />
{<br />
while( !Datamanager::getInstance()-&gt;isOutQueueCtrlEmpty())<br />
{<br />
QByteArray data = Datamanager::getInstance()-&gt;getItemFromOutQueueCtrl();<br />
int size  = mSerialManager-&gt;controlPort-&gt;write(data);<br />
if( size &gt; 0)<br />
{<br />
qDebug() &lt;&lt; "Control Serial Port Write Succesful: " &lt;&lt; size ;<br />
}<br />
else<br />
{<br />
qDebug() &lt;&lt; "Control Serial Port Write Error: " &lt;&lt; size ;<br />
}<br />
}<br />
}<br />
else<br />
{<br />
qDebug() &lt;&lt; "NO Serial Port Connection to Write ";<br />
}<br />
}</p>
</li>
</ol>
<p dir="auto">I can understand that it can be common thread problem, but it was working fine for a long time .<br />
I will check for the thread ID as well to make sure on that part.</p>
]]></description><link>https://forum.qt.io/post/520965</link><guid isPermaLink="true">https://forum.qt.io/post/520965</guid><dc:creator><![CDATA[asthana]]></dc:creator><pubDate>Wed, 03 Apr 2019 10:29:52 GMT</pubDate></item><item><title><![CDATA[Reply to Writing to the serial port crashes my application on Wed, 03 Apr 2019 09:28:37 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/asthana">@<bdi>asthana</bdi></a> ,</p>
<p dir="auto">Just read about the right way using the threads. You should to create the QSP instance and to call its methods only from the same thread.</p>
<p dir="auto">E.g. if your worker was created in context of thread #2, then Worker::writeToControlPort() should be called too from the context of thread #2. Check the right thread id, just use QThread::currentThreadId() in ctor of Worker and inside of Worker::writeToControlPort() to see that this ID same.</p>
<p dir="auto">PS: Read documentation, it is a main advice to you, before asking on a forum!!! It is simple...</p>
]]></description><link>https://forum.qt.io/post/520953</link><guid isPermaLink="true">https://forum.qt.io/post/520953</guid><dc:creator><![CDATA[kuzulis]]></dc:creator><pubDate>Wed, 03 Apr 2019 09:28:37 GMT</pubDate></item><item><title><![CDATA[Reply to Writing to the serial port crashes my application on Wed, 03 Apr 2019 09:15:32 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/kuzulis">@<bdi>kuzulis</bdi></a><br />
Yeah, there are two threads that read and write to the port, so to check on that I stopped sending any data from User Interface(UI) that my application was reading and only write the data to the port which is sent to UI .<br />
But still the problem is there.</p>
]]></description><link>https://forum.qt.io/post/520952</link><guid isPermaLink="true">https://forum.qt.io/post/520952</guid><dc:creator><![CDATA[asthana]]></dc:creator><pubDate>Wed, 03 Apr 2019 09:15:32 GMT</pubDate></item><item><title><![CDATA[Reply to Writing to the serial port crashes my application on Wed, 03 Apr 2019 08:45:29 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/aha_1980">@<bdi>aha_1980</bdi></a><br />
actually it can be,<br />
from the looks of it, the serial port is threaded ( I take this from the naming of the class and the thread count)</p>
<p dir="auto">And from the looks of it, <code> Datamanager::getInstance()-&gt;getItemFromOutQueueCtrl();</code> may very well become invalid during the write process. As it seams to be a singleton and may be accessed by different threads?<br />
One shouldn't do that, but it won't result in a compiler error.</p>
]]></description><link>https://forum.qt.io/post/520939</link><guid isPermaLink="true">https://forum.qt.io/post/520939</guid><dc:creator><![CDATA[J.Hilk]]></dc:creator><pubDate>Wed, 03 Apr 2019 08:45:29 GMT</pubDate></item><item><title><![CDATA[Reply to Writing to the serial port crashes my application on Wed, 03 Apr 2019 08:19:18 GMT]]></title><description><![CDATA[<p dir="auto">I assume that you use a multiple threads (as I can see from your screenshoot with the 'Worker' class). If so, then you do it wrong... It is my assumption.</p>
]]></description><link>https://forum.qt.io/post/520935</link><guid isPermaLink="true">https://forum.qt.io/post/520935</guid><dc:creator><![CDATA[kuzulis]]></dc:creator><pubDate>Wed, 03 Apr 2019 08:19:18 GMT</pubDate></item><item><title><![CDATA[Reply to Writing to the serial port crashes my application on Wed, 03 Apr 2019 07:38:50 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/asthana">@<bdi>asthana</bdi></a> I don't think the QByteArray is the problem.</p>
<p dir="auto">Please rather check <a class="plugin-mentions-user plugin-mentions-a" href="/user/christian-ehrlicher">@<bdi>Christian-Ehrlicher</bdi></a>'s suggestion:</p>
<blockquote>
<p dir="auto">And where do you check for mSerialManager != nullptr? Or is it guaranteed that it can never be nullptr? And is controlPort really correctly initialized and not a dangling pointer?</p>
</blockquote>
<p dir="auto">That seems much more a possible cause for your problem.</p>
<p dir="auto">Regards</p>
]]></description><link>https://forum.qt.io/post/520930</link><guid isPermaLink="true">https://forum.qt.io/post/520930</guid><dc:creator><![CDATA[aha_1980]]></dc:creator><pubDate>Wed, 03 Apr 2019 07:38:50 GMT</pubDate></item><item><title><![CDATA[Reply to Writing to the serial port crashes my application on Wed, 03 Apr 2019 07:13:55 GMT]]></title><description><![CDATA[<h2>Debug Trace</h2>
<p dir="auto">Function: QIODevice::write(QByteArray const&amp;)<br />
0x4a3bc1  &lt;+0x0025&gt;         mov    %ebx,0x4(%esp)<br />
0x4a3bc5  &lt;+0x0029&gt;         mov    %esi,0x8(%esp)<br />
0x4a3bc9  &lt;+0x002d&gt;         mov    %eax,(%esp)<br />
0x4a3bcc  &lt;+0x0030&gt;         mov    %edx,%ecx<br />
0x4a3bce  &lt;+0x0032&gt;         mov    0x544914,%eax<br />
0x4a3bd3  &lt;+0x0037&gt;         call   *%eax<br />
<strong>0x4a3bd5  &lt;+0x0039&gt;         sub    $0xc,%esp</strong><br />
0x4a3bd8  &lt;+0x003c&gt;         lea    -0x8(%ebp),%esp<br />
0x4a3bdb  &lt;+0x003f&gt;         pop    %ebx<br />
0x4a3bdc  &lt;+0x0040&gt;         pop    %esi<br />
0x4a3bdd  &lt;+0x0041&gt;         pop    %ebp<br />
0x4a3bde  &lt;+0x0042&gt;         ret    $0x4<br />
Function: _ZN9QIODevice5writeERK10QByteArray<br />
0x4a3be1  &lt;+0x0045&gt;         nop<br />
0x4a3be2  &lt;+0x0046&gt;         nop<br />
0x4a3be3  &lt;+0x0047&gt;         nop</p>
<p dir="auto">Please find the attched screenshot for the same<br />
<img src="https://ddgobkiprc33d.cloudfront.net/9f16d550-2320-4adf-a8b0-f42811ad488f.png" alt="0_1554275625743_Debug Logs.png" class=" img-fluid img-markdown" /></p>
]]></description><link>https://forum.qt.io/post/520926</link><guid isPermaLink="true">https://forum.qt.io/post/520926</guid><dc:creator><![CDATA[asthana]]></dc:creator><pubDate>Wed, 03 Apr 2019 07:13:55 GMT</pubDate></item><item><title><![CDATA[Reply to Writing to the serial port crashes my application on Wed, 03 Apr 2019 06:08:46 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/hskoglund">@<bdi>hskoglund</bdi></a><br />
"<strong>mSerialManager-&gt;controlPort-&gt;waitForBytesWritten(-1);"</strong> actually slows down the application and since I am communication it to User Interface for display , the screen hangs and don't show any activity for sometime. I also tried giving a delay through this<br />
i.e "<strong>waitForBytesWritten(20)</strong>" this works fine in terms of screen updates but still it crashes.</p>
]]></description><link>https://forum.qt.io/post/520915</link><guid isPermaLink="true">https://forum.qt.io/post/520915</guid><dc:creator><![CDATA[asthana]]></dc:creator><pubDate>Wed, 03 Apr 2019 06:08:46 GMT</pubDate></item><item><title><![CDATA[Reply to Writing to the serial port crashes my application on Tue, 02 Apr 2019 16:58:28 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/asthana">@<bdi>asthana</bdi></a> said in <a href="/post/520801">Writing to the serial port crashes my application</a>:</p>
<blockquote>
<p dir="auto">if( mSerialManager-&gt;controlPort != NULL)</p>
</blockquote>
<p dir="auto">And where do you check for mSerialManager != nullptr? Or is it guaranteed that it can never be nullptr? And is controlPort really correctly initialized and not a dangling pointer?</p>
]]></description><link>https://forum.qt.io/post/520845</link><guid isPermaLink="true">https://forum.qt.io/post/520845</guid><dc:creator><![CDATA[Christian Ehrlicher]]></dc:creator><pubDate>Tue, 02 Apr 2019 16:58:28 GMT</pubDate></item><item><title><![CDATA[Reply to Writing to the serial port crashes my application on Tue, 02 Apr 2019 13:15:33 GMT]]></title><description><![CDATA[<p dir="auto">Hi, I'm guessing that the QByteArray is torned down before all the bytes are transmitted, you could try to use a waitForBytesWritten() before the destructor of the QByteArray:</p>
<pre><code>if( mSerialManager-&gt;controlPort != NULL)
{
    QByteArray data = Datamanager::getInstance()-&gt;getItemFromOutQueueCtrl();
    int size = mSerialManager-&gt;controlPort-&gt;write(data);
    mSerialManager-&gt;controlPort-&gt;waitForBytesWritten(-1);
}
</code></pre>
<p dir="auto">or you could turn the QByteArray into a static one:</p>
<pre><code>if( mSerialManager-&gt;controlPort != NULL)
{
    static QByteArray data = Datamanager::getInstance()-&gt;getItemFromOutQueueCtrl();
    int size = mSerialManager-&gt;controlPort-&gt;write(data);
}
</code></pre>
]]></description><link>https://forum.qt.io/post/520819</link><guid isPermaLink="true">https://forum.qt.io/post/520819</guid><dc:creator><![CDATA[hskoglund]]></dc:creator><pubDate>Tue, 02 Apr 2019 13:15:33 GMT</pubDate></item><item><title><![CDATA[Reply to Writing to the serial port crashes my application on Tue, 02 Apr 2019 11:58:11 GMT]]></title><description><![CDATA[<p dir="auto">exactly, as per debug trace it goes to the qt internal function call i.e<br />
inline qint64 write(const QByteArray &amp;data)<br />
{ return write(data.constData(), data.size()); } in QIODevice.h and segmentation fault.<br />
and checked the size of data as well its never zero.</p>
]]></description><link>https://forum.qt.io/post/520808</link><guid isPermaLink="true">https://forum.qt.io/post/520808</guid><dc:creator><![CDATA[asthana]]></dc:creator><pubDate>Tue, 02 Apr 2019 11:58:11 GMT</pubDate></item><item><title><![CDATA[Reply to Writing to the serial port crashes my application on Tue, 02 Apr 2019 11:47:55 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/asthana">@<bdi>asthana</bdi></a> said in <a href="/post/520801">Writing to the serial port crashes my application</a>:</p>
<blockquote>
<p dir="auto">int size  = mSerialManager-&gt;controlPort-&gt;write(data);</p>
</blockquote>
<p dir="auto">Does it crash at this line?</p>
]]></description><link>https://forum.qt.io/post/520803</link><guid isPermaLink="true">https://forum.qt.io/post/520803</guid><dc:creator><![CDATA[jsulm]]></dc:creator><pubDate>Tue, 02 Apr 2019 11:47:55 GMT</pubDate></item><item><title><![CDATA[Reply to Writing to the serial port crashes my application on Tue, 02 Apr 2019 11:41:12 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/jsulm">@<bdi>jsulm</bdi></a><br />
yeah, I check for the pointer being valid and not null by using  below code , open was just another check that I recently introduced...<br />
if( mSerialManager-&gt;controlPort != NULL)<br />
{<br />
QByteArray data = Datamanager::getInstance()-&gt;getItemFromOutQueueCtrl();<br />
int size  = mSerialManager-&gt;controlPort-&gt;write(data);<br />
}</p>
]]></description><link>https://forum.qt.io/post/520801</link><guid isPermaLink="true">https://forum.qt.io/post/520801</guid><dc:creator><![CDATA[asthana]]></dc:creator><pubDate>Tue, 02 Apr 2019 11:41:12 GMT</pubDate></item><item><title><![CDATA[Reply to Writing to the serial port crashes my application on Tue, 02 Apr 2019 11:26:30 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/asthana">@<bdi>asthana</bdi></a> It's not about checking whether it is open or not. It is about checking the pointers before dereferencing them - dereferencing an invalid pointers crashes application.</p>
]]></description><link>https://forum.qt.io/post/520797</link><guid isPermaLink="true">https://forum.qt.io/post/520797</guid><dc:creator><![CDATA[jsulm]]></dc:creator><pubDate>Tue, 02 Apr 2019 11:26:30 GMT</pubDate></item><item><title><![CDATA[Reply to Writing to the serial port crashes my application on Tue, 02 Apr 2019 11:21:17 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/mrjj">@<bdi>mrjj</bdi></a><br />
Hi,<br />
yeah i always check for that whether that port is null or not open<br />
if( mSerialManager-&gt;controlPort-&gt;isOpen())<br />
{<br />
// code<br />
}</p>
]]></description><link>https://forum.qt.io/post/520796</link><guid isPermaLink="true">https://forum.qt.io/post/520796</guid><dc:creator><![CDATA[asthana]]></dc:creator><pubDate>Tue, 02 Apr 2019 11:21:17 GMT</pubDate></item><item><title><![CDATA[Reply to Writing to the serial port crashes my application on Tue, 02 Apr 2019 10:52:40 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/asthana">@<bdi>asthana</bdi></a><br />
If you place a breakpoint and inspect the pointers.<br />
They are both valid ?<br />
mSerialManager / controlPort<br />
?</p>
]]></description><link>https://forum.qt.io/post/520792</link><guid isPermaLink="true">https://forum.qt.io/post/520792</guid><dc:creator><![CDATA[mrjj]]></dc:creator><pubDate>Tue, 02 Apr 2019 10:52:40 GMT</pubDate></item><item><title><![CDATA[Reply to Writing to the serial port crashes my application on Tue, 02 Apr 2019 10:51:59 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/asthana">@<bdi>asthana</bdi></a></p>
<p dir="auto">You need to check that <code>mSerialManager</code> and <code>controlPort</code> are valid pointers.</p>
]]></description><link>https://forum.qt.io/post/520791</link><guid isPermaLink="true">https://forum.qt.io/post/520791</guid><dc:creator><![CDATA[aha_1980]]></dc:creator><pubDate>Tue, 02 Apr 2019 10:51:59 GMT</pubDate></item><item><title><![CDATA[Reply to Writing to the serial port crashes my application on Tue, 02 Apr 2019 10:47:36 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/vronin">@<bdi>VRonin</bdi></a> Hi,<br />
this is what the code i use<br />
int size  = mSerialManager-&gt;controlPort-&gt;write(data);</p>
<p dir="auto">but on crash it goes to that line what I mentioned</p>
]]></description><link>https://forum.qt.io/post/520790</link><guid isPermaLink="true">https://forum.qt.io/post/520790</guid><dc:creator><![CDATA[asthana]]></dc:creator><pubDate>Tue, 02 Apr 2019 10:47:36 GMT</pubDate></item><item><title><![CDATA[Reply to Writing to the serial port crashes my application on Tue, 02 Apr 2019 10:16:19 GMT]]></title><description><![CDATA[<p dir="auto">Hi and welcome to the forums.<br />
You can try to upgrade to a newer version of Qt and see if it was fixed.</p>
]]></description><link>https://forum.qt.io/post/520782</link><guid isPermaLink="true">https://forum.qt.io/post/520782</guid><dc:creator><![CDATA[mrjj]]></dc:creator><pubDate>Tue, 02 Apr 2019 10:16:19 GMT</pubDate></item><item><title><![CDATA[Reply to Writing to the serial port crashes my application on Tue, 02 Apr 2019 10:16:17 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/asthana">@<bdi>asthana</bdi></a> said in <a href="/post/520778">Writing to the serial port crashes my application</a>:</p>
<blockquote>
<p dir="auto">mostly looks like the QByteArray issue</p>
</blockquote>
<p dir="auto">Then try <code> return write(data);</code> instead. No need to pass QByteArray internals</p>
]]></description><link>https://forum.qt.io/post/520781</link><guid isPermaLink="true">https://forum.qt.io/post/520781</guid><dc:creator><![CDATA[VRonin]]></dc:creator><pubDate>Tue, 02 Apr 2019 10:16:17 GMT</pubDate></item></channel></rss>