Dead Lock wenn POST-Daten vorhanden und Output > 60 KBytes

Alles, was den Apache betrifft, kann hier besprochen werden.

Dead Lock wenn POST-Daten vorhanden und Output > 60 KBytes

Postby CGIProb » 10. May 2010 21:13

EDIT: Bitte gleich zum 4. Beitrag springen, da ist das Problem ganz genau geschildert. Das andere lasse ich mal hier zu historischen Zwecken.

Hallo,

ich habe ein CGI-Skript geschrieben. Ab einem gewissen Output bleibt das Skript einfach hängen. Ich schließe es dann per Taskmanager und erst dann wird dieser Output zum Browser gesendet. Natürlich arbeitet das Skript nicht weiter, was sehr nervig ist.
Ich versuche schon fflush(stdout), aber das führt zu keinem Erfolg. Erst wenn das Skript komplett abgearbeitet ist, wird der Output angezeigt. Das kann doch irgendwie nicht sein.
Ich bin mit dem Problem nicht alleine hier http://marc.info/?l=apache-httpd-users& ... 427249&w=4 wird vom selben Problem berichtet, leider ohne Lösung.

Ich hoffe ihr wisst eine Lösung.

Danke schonmal.
Last edited by CGIProb on 10. May 2010 23:07, edited 2 times in total.
CGIProb
 
Posts: 5
Joined: 10. May 2010 21:08

Re: CGI Skript bleibt ab gewissem Output hängen

Postby CGIProb » 10. May 2010 21:58

Ich habe hier http://www.fiveanddime.net/httpd-2.2.0/ ... 2.txt.html noch etwas gefunden
Changed cgi and piped log behavior to accept 65536 characters
on Win32 (matching Linux) before deadlocking between outputing
client stdin, slurping the output from stdout and then the stderr
stream. PR 8179 [William Rowe]

Das scheint etwas mit meinem Problem zu tun zu haben. Kurz bevor 65536 Bytes vom Skript ausgegeben wurden, tritt der Deadlock auf.
CGIProb
 
Posts: 5
Joined: 10. May 2010 21:08

Re: CGI Skript bleibt ab gewissem Output hängen

Postby CGIProb » 10. May 2010 22:57

Das Problem entsteht während ich versuche vom Standardinput (stdin) zu lesen.
Der Jana-Server macht hier schon bei ca. 4096 Bytes schlapp und der Deadlock tritt auf.

Genauer Skriptablauf.
Daten werden per Post ans cgi geschickt. cgi liest das in eine Datei ein, gibt den Status zurück.
Wurden zuviele Statusmeldungen ausgeben (zu viele Daten an stdout), so gibts einen Deadlock.
Beim Apache früher, beim Janaserver später. Woran liegt das?

Das Problem tritt nicht auf, wenn man nicht versucht vom Standardinput zu lesen, dann kann man soviel ausgeben wie mal will.
CGIProb
 
Posts: 5
Joined: 10. May 2010 21:08

Re: Dead Lock wenn POST-Daten vorhanden und Output > 60 KBytes

Postby CGIProb » 10. May 2010 23:11

Ich konnte das Problem nun exakt kalkulieren.

Der Output des Skriptes macht nur Probleme, wenn Post-Daten vorhanden sind. Sind keine vorhanden, kann ich auch locker 900 KByte ausgeben.
Erst wenn am stdin Daten (sprich Postdaten) vorhanden sind, tritt der Deadlock auf. Sobald ca. 65000 Zeichen ausgeben wurden, hängt das Programm. Wenn Parameter mit get übergeben werden, gibt es auch keine Probleme.

Ich hoffe ihr könnt mir helfen die Ursache zu finden.
CGIProb
 
Posts: 5
Joined: 10. May 2010 21:08

Re: Dead Lock wenn POST-Daten vorhanden und Output > 60 KBytes

Postby CGIProb » 11. May 2010 00:16

Sehr deutlich sieht man das Problem mit folgendem kleinen Skript
Code: Select all
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

void main(int argc, char *argv[], char* envp[] )
{
   printf("Content-Type: text/plain;charset=us-ascii\n\n");
   for(;;)
   {
      printf("working\n");
      fflush(stdout);
      Sleep(100);
   }
}

Die Seite scrollt "working" nach unten, so wie sie es tun soll.
Postet man jedoch nun Daten an dieses Skript und übersteigen diese Daten ca. 63 KB, dann ist Ende im Gelände und das Skript zeigt keinen Output mehr. Ich muss die cgi per Taskmanager beenden und dann sehe ich erst eine Ausgabe im Browser.

Ich hoffe das waren genug Infos um das Problem zu lokalisieren.
CGIProb
 
Posts: 5
Joined: 10. May 2010 21:08


Return to Apache

Who is online

Users browsing this forum: No registered users and 6 guests