MQX 4.1: CGI script in separated tasks + keep-alive

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

MQX 4.1: CGI script in separated tasks + keep-alive

Jump to solution
3,176 Views
lfschrickte
Contributor IV

Hi,

I've just realized that, in my application (and also in the httpsrv sample that comes with MQX FRDM-K64F RTOS) that there is a problem in the CGI scripts support.

Once a script is defined to run in a separated task (script stack size > 0), and two requests for the same CGI script are made within the keep alive timeout interval, the http system freezes. The same problem happens if two different scripts requests are done in this interval (if both have stack size != 0).

It is simple to reproduce the problem: FRDM-K64F + MQX RTOS 4.1 package for FRDM-K64F + httpsrv sample. Open the index web page in the browser and perform some fast clicks in the "System RunTime (RTC) button (which is the only one that calls a CGI script configured to run in a separated task).

A similar problem (which can have different causes) is described here: Re: MQX 4 - HTTPSRV : sockets stay opened

I would appreciate any help!

Luiz Fernando

Labels (1)
0 Kudos
Reply
1 Solution
1,548 Views
karelm_
Contributor IV

Hi,

please add following line:

_lwsem_post(&session->lock);

To file httpsrv_task.c in folder rtcs\source\apps\httpsrv_task.c to line 455 and let me know if it helped you.

Best regards,

Karel.

View solution in original post

0 Kudos
Reply
8 Replies
1,549 Views
karelm_
Contributor IV

Hi,

please add following line:

_lwsem_post(&session->lock);

To file httpsrv_task.c in folder rtcs\source\apps\httpsrv_task.c to line 455 and let me know if it helped you.

Best regards,

Karel.

0 Kudos
Reply
1,548 Views
lfschrickte
Contributor IV

Thank you Karel! It solved my problem!

So, was that a bug? Do I need to report it somewhere else in order to get it corrected for the next MQX RTOS release?

Other weird thing I noted is that the HTTPSRVCFG_KEEPALIVE_ENABLED option does not appear in the Codewarrior view of the user_config.h file. I needed to add it manually to the user_config.h file, after the MCT generated code comment (otherwise it gets removed every time I change some config and recompile RTCS, as it should be). It would be nice to have the option in the CW user_config.h view. Below the print of the view without the option mentioned.

2014-06-18 10_03_41-C_C   - bsp_frdmk64f_User_Config_user_config.h - CodeWarrior Development Studio.png

Thank you very much! It is so nice to receive such fast and accurate answer!

Regards

Luiz Fernando

0 Kudos
Reply
1,548 Views
karelm_
Contributor IV

Hi,

Yes it was a bug. You doesn't have to report it elsewhere. I have already fixed it on our development branch, so it will be fixed in nearest MQX release (4.2 probably).

Best regards,

Karel.

0 Kudos
Reply
1,548 Views
m_bach
Contributor III

Hi there,

I'm suffering the very same problem I think. I installed MQX 4.1, plus patch 4.1.0.1 applied...

Running the default demo web-server, I'm doing a HTTP-GET testloop on my linux machine like this:

$ while [ true ]; do wget "http://192.168.3.43/icmpstats.cgi" -O /tmp/bla  ; done

which is working fine and robust, as it uses doesn't use a seperate task (stack size = 0)

rtcdata.cgi does not work the same... when calling

  $ while [ true ]; do wget "http://192.168.3.43/rtcdata.cgi" -O /tmp/bla  ; done

a few subsequent wget calls are doing fine, but then suddenly the loop stops, the ressource is not available anymore.

This is the session->lock Patch I applied, but it does not help. it does not change the situation at all.

Index: httpsrv_task.c

===================================================================

--- httpsrv_task.c (revision 8288)

+++ httpsrv_task.c (working copy)

@@ -452,6 +452,7 @@

                 session->time = RTCS_time_get();

                 session->timeout = HTTPSRVCFG_KEEPALIVE_TO;

                 session->keep_alive = 1;

+                _lwsem_post(&session->lock);

             }

             break;

         case HTTPSRV_SES_CLOSE:

Once the rtcdata.cgi ressource got stuck, every other ressource such as icmpstat.cgi is not available anymore, too.

I'll play around with the sources for myself, still hoping to get some help here...

cheers, Martin

0 Kudos
Reply
1,548 Views
karelm_
Contributor IV

Hi Martin,

I was unable to reproduce this problem in MQX 4.1.0.1. I used exactly same shell script as you did. Both icmpstat.cgi and rtcdata.cgi were read successfully. What board you use and what is your configuration?

edit:

please make sure you recompiled RTCS after you applied 4.1.0.1 and lwsem patch.

Best regards,

Karel

0 Kudos
Reply
1,548 Views
m_bach
Contributor III

Hi Karel,

thanks a lot for your reply, that's good news somehow. I guess... Indeed I'm using a custom BSP, derived from the 52259 eval Tower. I will double-check it all with the Tower board, and come back to you later...

Thanks in advance, Martin

0 Kudos
Reply
1,548 Views
karelm_
Contributor IV

Hi Martin,

there might be a problem with rtcdata.cgi stack. Try to increase it to 3kB in structure cgi_lnk_tbl, file rtcs\examples\httpsrv\cgi.c. In a meantime I will try to reproduce it on 52259 tower board.

Best regards,

Karel

EDIT:

I just tried on MCF52259. HTTP server example (in default configuration) seems to work fine even when I try to read rtcdata.cgi with wget in cycle. However I would recommend to use sleep function in your shell script to limit how fast requests are generated.

0 Kudos
Reply
1,548 Views
m_bach
Contributor III

Hi Karel,

I switched to the 52259 eval tower, using vanilla 4.1.0.1 MQX. No Problem here with the wget loop getting rtcdata.cgi

That is even without the _lwsem_post(&session->lock); patch.

So I will continue with my custom BSP to figure out what is going on there in difference to the eval-tower.

thanks for your help, Martin

0 Kudos
Reply