Seite 1 von 1
Variablen werden verfälscht !?
Verfasst: Sonntag 18. April 2010, 18:18
von INFACT
Hi,
Ich benutze in meinem Programm threads und meine variablen werden manchmal so komisch überschrieben. Ich bekomme dann vom server 2 sachen ( für jeden thread ).
Zum Beispiel AAAAAA und BBBBBB. Dann, parse ich diese Eingaben und dann bekomme ich den Error, dass der Parser nicht weiß was er mit AABBA machen soll.
Es sind auch weniger Buchstaben, als bei den Sachen die der Server gesendet hat. Warum kann das passieren? Ich habe auch locks eingebaut, aber ich weiß nicht warum immer dieser Fehler kommt.
Ein Fehler vom Server ist es bestimmt nicht. Das habe ich schon überprüft.
Hat jemand ideen woran das liegen kann
Verfasst: Sonntag 18. April 2010, 18:21
von CM
Code?
Verfasst: Sonntag 18. April 2010, 18:26
von INFACT
CM hat geschrieben:Code?
Ich stell hier nicht den ganzen Code rein, weil der einfach viel zu lang ist ( 4000 Zeilen ) aber ich versuche das mal nachzustellen... Poste ich dann
Verfasst: Sonntag 18. April 2010, 18:42
von INFACT
Hier:
der Server
http://paste.pocoo.org/show/203321/
der Client
http://paste.pocoo.org/show/203323/
Kann sowas überhaupt passieren oder liegt das vielleicht an meinem Programm? Vielleicht initialisieren die thread 2 variablen and der gleichen adresse, und dann schreiben die da Code rein, oder sowas wie ein bufferoverflow, vielleicht rede ich aber auch einfach nur schwachsinn...

Verfasst: Sonntag 18. April 2010, 19:13
von DasIch
Wie kommst du darauf dass .send() auf ein socket atomar ist?
Verfasst: Sonntag 18. April 2010, 19:14
von INFACT
DasIch hat geschrieben:Wie kommst du darauf dass .send() auf ein socket atomar ist?
Was heißt denn atomar? sry, ich habe gerade nur atom gefunden:
http://de.wikipedia.org/wiki/Atomar
Verfasst: Sonntag 18. April 2010, 19:20
von INFACT
Heißt das ich soll auch vor und nach der send funktion vom server einen lock einbauen?
Verfasst: Sonntag 18. April 2010, 19:20
von DasIch
@INFACT Der Artikel hat einen Abschnitt Informatik der nebenbei auch noch den Artikel
atomare Operation verlinkt, der den Begriff erklärt.
Verfasst: Sonntag 18. April 2010, 20:37
von INFACT
Ich habe jetzt das da eingebaut, aber es funktioniert trotzdem nicht:
Code: Alles auswählen
self.socketLock.acquire()
conn.send(ret)
self.socketLock.release()
Hab ich das falsch verstanden oder warum funktioniert das nicht?
Verfasst: Montag 19. April 2010, 17:50
von fabi1511
ich kenne mich mit den internen vorgängen des socket moduls zwar nicht aus, aber in der Dokumentation steht man sollte am besten eine zweierpotenz für den bufsize parameter nehmen, vieleicht probierst du mal eine bufsize von 8192 (2^13) was andres fällt mi auch nicht ein...