# Block without work function won't stop

**URL:** <https://www.ruby-forum.com/t/block-without-work-function-wont-stop/242090>\
**Category:** GNU Radio\
**Created:** [May 26, 2015, 2:11pm UTC](https://www.ruby-forum.com/t/block-without-work-function-wont-stop/242090 "2015-05-26T14:11:11Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![musicdenotation](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/ea666f/32.png) [@musicdenotation](https://www.ruby-forum.com/u/musicdenotation)\
**Post date:** [May 26, 2015, 2:11pm UTC](https://www.ruby-forum.com/t/block-without-work-function-wont-stop/242090/1 "2015-05-26T14:11:11Z")

</div>

Hi all,

I have a block that is used only for acepting messages and writing their  
content into database. The block is written in python and it has no work  
function, but only constructor and message handler. However when I run  
my  
flowgraph it won’t finish until I terminate it. When I exclude this  
block  
it runs to completion normally.  
Is there any issue with messages in this case. Should I manually delete  
messages from the message queue or something like that.

Best,

---

<div class="post-metadata">

**Author:** ![Nemanja\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/7bcc69/32.png) [@Nemanja\_S](https://www.ruby-forum.com/u/Nemanja_S)\
**Post date:** [May 26, 2015, 2:39pm UTC](https://www.ruby-forum.com/t/block-without-work-function-wont-stop/242090/2 "2015-05-26T14:39:14Z")

</div>

Hi,

thank you Marcus for your fast answer. Well, the problem is that nobody  
ecept scheduler knows when the flowgraph has finished, so I don’t know  
who  
should sent that message to the block. This is however not of crucial  
importance for me. Namely I wanted to test some of my custom blocks, and  
test flowgraph necever reached completion, but as soon as message  
accepting  
dummy block was out everything was fine.

Best,  
Nemanja

On Tue, May 26, 2015 at 2:29 PM, Marcus Müller  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![Nemanja\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/7bcc69/32.png) [@Nemanja\_S](https://www.ruby-forum.com/u/Nemanja_S)\
**Post date:** [May 26, 2015, 2:31pm UTC](https://www.ruby-forum.com/t/block-without-work-function-wont-stop/242090/3 "2015-05-26T14:31:03Z")

</div>

Hi Nemanja,

the point is that with message passing, it’s not clear that your block  
is ever finished.  
Hence in block.cc, we have a mechanism to retrieve the “finishedness” of  
a pure-message-block.

bool  
block::finished()  
{  
if((detail()-\>ninputs() != 0) || (detail()-\>noutputs() != 0))  
return false;  
else  
return d\_finished;  
}

So, you’ll have to set the d\_finished variable of your block; sadly,  
that’s a private one by design (I think there are thread-safety reasons  
this is not directly exposed, but I’m not sure – I’d have to as T[io]m  
about that).  
The proper way to do so is to send your block a message to its  
pmt::mp(“system”) port, containing pmt::mp(“done”).

Best regards,  
Marcus

---

<div class="post-metadata">

**Author:** ![Nemanja\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/7bcc69/32.png) [@Nemanja\_S](https://www.ruby-forum.com/u/Nemanja_S)\
**Post date:** [September 2, 2015, 2:48pm UTC](https://www.ruby-forum.com/t/block-without-work-function-wont-stop/242090/4 "2015-09-02T14:48:58Z")

</div>

Namely,

my workless function block blocks my flowgraph when I call unlock(). I  
made  
a method where I set d\_finished to True, but this doesn’t help.

Nemanja

---

<div class="post-metadata">

**Author:** ![Nemanja\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/7bcc69/32.png) [@Nemanja\_S](https://www.ruby-forum.com/u/Nemanja_S)\
**Post date:** [September 2, 2015, 2:18pm UTC](https://www.ruby-forum.com/t/block-without-work-function-wont-stop/242090/5 "2015-09-02T14:18:35Z")

</div>

Hello again,

could you please Marcus, or somebody else, give me some hint for sending  
done message to a block’s “system” port. Are all blocks by default  
subscribed to system port?

Best,  
Nemanja

---

<div class="post-metadata">

**Author:** ![Nemanja\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/7bcc69/32.png) [@Nemanja\_S](https://www.ruby-forum.com/u/Nemanja_S)\
**Post date:** [September 2, 2015, 3:38pm UTC](https://www.ruby-forum.com/t/block-without-work-function-wont-stop/242090/6 "2015-09-02T15:38:03Z")

</div>

Huh, I’m out of my depth here.  
However, yes, every subclass of gr::block automatically has a  
pmt::mp(“system”) message port, that you can use to do such things.

Best regards,  
Marcus
