Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

[ Win/Linux ][ Netzwerk ] TSNE_V2 / V3 - Netzwerk-Modul
Gehe zu Seite Zurück  1, 2, 3, 4, 5, 6, 7, 8, 9, 10  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  

Wie findet Ihr dieses Projekt?
Super
80%
 80%  [ 16 ]
Gut
10%
 10%  [ 2 ]
Mittelmässig
10%
 10%  [ 2 ]
Schlecht (Warum?)
0%
 0%  [ 0 ]
Scheisse (Warum?)
0%
 0%  [ 0 ]
Stimmen insgesamt : 20

Autor Nachricht
AxelNiedenhoff



Anmeldungsdatum: 24.03.2016
Beiträge: 8

BeitragVerfasst am: 24.03.2016, 16:17    Titel: Antworten mit Zitat

Danke für den Hinweis auf SNC! Und es ist auch schön zu wissen, dass es bei TSNE weitergeht … lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 25.03.2016, 00:35    Titel: Antworten mit Zitat

@AxelNiedenhoff ... bitte versuche einmal folgendes:

Suche in TSNE_V3.bi die Funktion
Code:
Private Function TSNE_Create_Client(ByRef ...


Gehe bis zur Zeile:
Code:
Dim BV as Integer = connect(TSock, CPtr(SOCKADDR Ptr, @TADDR), SizeOf(SOCKADDR))
If BV <> 0 Then


Hier wird anschließend per Präprozessor zwischen Linux und Windows unterschieden.
Code:

   #IF DEFINED(__FB_LINUX__)
      '...
   #ELSEIF DEFINED(__FB_WIN32__)
      '...
   #ENDIF


Im __FB_WIN32__ Abschnitt gilt es folgendes zu ändern:

Vorher:
Code:
   #ELSEIF DEFINED(__FB_WIN32__)
      FD_SET_(TSock, @TFDSet)
      With TTV
         .tv_sec = V_TimeoutSecs
         .tv_usec = 0
      End With
      FD_ZERO(@TFDSet)
      If select_(TSock + 1, 0, @TFDSet, 0, @TTV) = (INVALID_SOCKET or 0) Then Return TSNE_Const_CantConnectToRemote
      If Not (FD_ISSET(TSock, @TFDSet)) Then close_(TSock): Return TSNE_Const_CantConnectToRemote
      If TSock = INVALID_SOCKET Then Return TSNE_Const_CantConnectToRemote
   #ENDIF   


Nachher:
Code:
   #ELSEIF DEFINED(__FB_WIN32__)
      FD_ZERO(@TFDSet)
      FD_SET_(TSock, @TFDSet)
      With TTV
         .tv_sec = V_TimeoutSecs
         .tv_usec = 0
      End With
      If select_(TSock + 1, 0, @TFDSet, 0, @TTV) = (INVALID_SOCKET or 0) Then Return TSNE_Const_CantConnectToRemote
      If Not (FD_ISSET(TSock, @TFDSet)) Then close_(TSock): Return TSNE_Const_CantConnectToRemote
      If TSock = INVALID_SOCKET Then Return TSNE_Const_CantConnectToRemote
   #ENDIF   


Geändert wird die Position von FD_ZERO(...)


Ich kann das leider nur eingeschränkt testen, da ich auf die schnelle keine lauffähige fbc win 64bit version ans laufen bekomme, in der die Windows-Header vollständig vorhanden sind.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 949
Wohnort: Austria

BeitragVerfasst am: 25.03.2016, 04:22    Titel: Antworten mit Zitat

Ich habs übrigens nicht mit 64-bit Windows sondern mit 64-bit Debian ausprobiert, wobei das Beispielprogramm nicht funktioniert hat (Fehler beim Verbindungsaufbau / Timeout).

Das Problem (oder: eines der Probleme) scheint also nicht Windows-only zu sein.
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AxelNiedenhoff



Anmeldungsdatum: 24.03.2016
Beiträge: 8

BeitragVerfasst am: 29.03.2016, 19:02    Titel: Antworten mit Zitat

@ThePuppetMaster: Deine Änderungen führen noch nicht ganz zum Erfolg (wie sich das schon abgezeichnet hat, da ja das Problem auch unter Linux reproduzierbar ist). Allerdings verändert sich der Fehler: Vorher kam die »Can’t connect«-Meldung praktisch direkt nach dem Start des Beispielprogramms. Jetzt kommt sie nach einiger Wartezeit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 06.04.2016, 01:16    Titel: Antworten mit Zitat

06.04.2016


  • In der Hostnameauflösung TSNE_INT_GetHostEnd wurde ein -1 durch ein Cast(ULong, -1) ersetzt um einen Auflösungsfehler auf 64Bit System zu beheben
  • In TSNE_Create_Client wurde im __FB_WIN32__ Zweig die Position von FD_ZERO vor FD_SET gesetzt. (War fälschlicherweise danach positioniert)



Aktuelle Version: https://www.freebasic-portal.de/porticula/tsnev3-bi-1826.html


Zu 1. Normalerweise sollte FBC alle Werte an den höchstwertigen Typen anpassen, was wohl aber in diesem Falle nicht ganz funktioniert hat. Daher die einfache Abhilfe mit dem direkten Cast, um noch vor dem DNS Request auf eine IP-Adresse zu prüfen.

Zu 2. FD_ZERO "leert" quasi den Type und deren Parameter. Dadurch, das diese Funktion NACH dem Setzen vom FD erfolgt, konnte die schlußendlich aufgerufene Select Funktion nur mit leeren Parametern arbeiten.


SRY: Hat mit dem Fix diesmal etwas länger gedauert als geplant. Arbeit geht derzeit leider einfach vor. verwundert


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AxelNiedenhoff



Anmeldungsdatum: 24.03.2016
Beiträge: 8

BeitragVerfasst am: 06.04.2016, 20:55    Titel: Antworten mit Zitat

Die neue Version funktioniert unter Win64. Danke!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Keltin



Anmeldungsdatum: 23.08.2012
Beiträge: 10

BeitragVerfasst am: 18.11.2016, 09:57    Titel: Antworten mit Zitat

Hi,

ich bin bei der nutzung von TSNE_Ping auf ein Problem gestoßen.

Wenn ich V_ForceRAWPing auf 1 setze und mehrere Threads parallel auf verschiedene Hosts Pingen lasse, dann meldet ein Thread den Ping eines anderen Threads zurück.
Merkt man daran das zB ein Host im Internet der normalerweise ca 50ms Ping hat auch mal mit unter 1ms angegeben wird oder das ein Thread der ein Host anpingt der nicht erreichbar ist doch eine Antwort meldet.

Das tritt übrigens auch auf wenn man ohne Threads arbeitet und mehrere instanzen des Programms papallel startet.

Kennt einer den Grund für das Problem oder vielleicht sogar eine Lösung?

MfG
Keltin
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 18.11.2016, 11:06    Titel: Antworten mit Zitat

Hi Keltin,

vielen dank für den Hinweis. Das muss ich mir aber erstmal zur genüge führen. Scheint ein etwas komplexeres Problem zu sein.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Keltin



Anmeldungsdatum: 23.08.2012
Beiträge: 10

BeitragVerfasst am: 18.11.2016, 14:28    Titel: Antworten mit Zitat

Danke schonmal für die Hilfe.
ich hab da mal auf Basis von deinem test_ping was vorbereitet:

Code:
#include once "TSNE_V3.bi"

Dim TRunTime as Double
Dim RV as Integer

Do Until InKey() = Chr(27)
RV = TSNE_Ping("127.0.0.1", TRunTime,1,1)

If RV <> TSNE_Const_NoError Then
   Print "[FEHLER] " & TSNE_GetGURUCode(RV)
End If

Print "Runtime: "; Str(TRunTime); " seconds"
Loop
End 0


Wenn der Code einmal mit einer erreichbaren IP und einer unerreichbaren IP kompiliert wird und beide Programme gleichzeitig laufen zeigen beide Pings an.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 18.11.2016, 14:38    Titel: Antworten mit Zitat

Hab da noch kurz zwei fragen:
* welches Betriebssystem verwendest du?
* welche FBC Version?


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Keltin



Anmeldungsdatum: 23.08.2012
Beiträge: 10

BeitragVerfasst am: 18.11.2016, 15:04    Titel: Antworten mit Zitat

Debian 8 (x64) und Windows 10 (x64)
FBC ist in beiden Fällen 1.05.0 (x86)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 27.11.2016, 11:08    Titel: Antworten mit Zitat

Nur kurz gefragt:
Kann es sein, dass TSNE sich nicht dafür eignet, es im Hauptprogramm UND einer darin dynamisch geladenen DLL zu verwenden? Habe das Problem, dass beim Laden der DLL das gesamte Programm hängen bleibt. Laut Debugger hat er Probleme mit TSNE_INT_Mutex_Master, bzw. er scheint sich in der Sub TSNE_INT_Thread_Master im äußeren Loop zu verlieren.
Irgendwelche Erfahrungen damit?

edit:
Es reicht im Plugin nur das Include auf die TSNE_V3.bi zu machen, den gesamten anderen Code habe ich per #if 0 ausgesetzt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 28.11.2016, 13:11    Titel: Antworten mit Zitat

Hmm .. das ist ne gute Frage. Das habe ich so noch nie ausprobiert. Ich habe zwar n paar APPs, welche die TSNE in Libs nutzen, aber das von dir beschriebene Verhalten habe ich bis jetzt noch nie beobachten können.

MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 28.11.2016, 13:17    Titel: Antworten mit Zitat

Ich teste aktuell mit fbc 1.05.0 x86 unter Windows (worauf DLL ja hinweist). Ich könnte noch unter Linux schauen, evtl verhält es sich da anders. Vielleicht muss ich tatsächlich versuchen, ein Minimalbeispiel zu bauen...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Keltin



Anmeldungsdatum: 23.08.2012
Beiträge: 10

BeitragVerfasst am: 02.03.2017, 14:51    Titel: Antworten mit Zitat

Hi,

ich wollte nur mal fragen ob es schon irgend welche Erkenntnisse über das Problem in TSNE_Ping gibt?

MfG
Keltin
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 02.05.2021, 23:25    Titel: Antworten mit Zitat

03.05.2021


KRITISCHE FEHLERBEHEBUNG

  • Speicherverlust beim DeAllocate behoben



Aktuelle Version: https://www.freebasic-portal.de/porticula/tsnev3-bi-1860.html


In allen Routinen die ein DeAllocate auf eine Typen-Struktur mit min. einer String-Variable anwenden, kommt es zu einem Speicherverlust. Die detailierte Ursache (unter Linux getestet) vermute ich in FreeBASIC selbst da der Verlust nicht mehr Auftritt, sobald der String mit ... = "" ... Vorher "geleert" wird.

Code:

Type TestType
    TInt as Integer
    TStr as String
End Type

Dim Test as TestType Ptr = CAllocate(SizeOf(TestType))
Test->TStr = "Abc"

DeAllocate(Test)

End 0

Dies verursacht einen Speicherverlust!

Mit einem...
Code:

'...
Test->TStr = "Abc"

Test->TStr = ""   '<-----
DeAllocate(Test)
'...

tritt der Verlust nicht ein.


MfG
TPM


PS: das ganze hat wohl ziemlich weitreichende folgen, da ich selbst LL's in vielen Applikationen in ähnlichen Strukturen einsetze, und das wohl einiges erklärt ... Kopf schütteln weinen traurig
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 02.05.2021, 23:37    Titel: Antworten mit Zitat

Wie sieht es aus, wenn du NEW / DELETE statt ALLOCATE / DEALLOCATE verwendest? Ich denke, dann müsste das UDT "sauber" zerstört werden. Bei DEALLOCATE kann das Aufräumen an sich gar nicht vom Compiler übernommen werden; der String-Inhalt liegt ja außerhalb des allozierten Speichers.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 03.05.2021, 00:11    Titel: Antworten mit Zitat

Hi nemored,

.... scheint in der Tat zu funktionieren .. zumindest bei den ersten tests. ... Werde das noch genauer untersuchen, und wohl schlussendlich 53.242.145.654.321 Zeilen Code in all meinen app's anpassen müssen ... verwundert


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 03.05.2021, 09:44    Titel: Antworten mit Zitat

Hallo,

ich habe da mal eine ganz dumme Frage: Wie stellt man so ein Speicherleck fest (außer daß irgendwann alles abstürzt)? Die Funktion FRE hat -wie ich feststellen musste- keinerlei Aussagekraft.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 03.05.2021, 10:44    Titel: Antworten mit Zitat

unter Linux kannst du "valgrind" einsetzen

Code:
Type TestType
    TInt as Integer
    TStr as String
End Type
Dim Test as TestType Ptr = CAllocate(SizeOf(TestType))
Test->TStr = "Abc"
DeAllocate(Test)
Test->TStr = "Abc"
End 0


mit
Code:
fbc -g ...

compilieren. und dann mit
Code:
valgrind ./<binaryname>

bzw. z.B. ./test ausführen.

Dann erhält man etwas in dieser Art:
Code:
tpm@kiste12:/test$ fbc -g test.bas && valgrind ./test
==24079== Memcheck, a memory error detector
==24079== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==24079== Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info
==24079== Command: ./test
==24079==
==24079==
==24079== HEAP SUMMARY:
==24079==     in use at exit: 22,326 bytes in 18 blocks
==24079==   total heap usage: 47 allocs, 29 frees, 31,489 bytes allocated
==24079==
==24079== LEAK SUMMARY:
==24079==    definitely lost: 37 bytes in 1 blocks
==24079==    indirectly lost: 0 bytes in 0 blocks
==24079==      possibly lost: 0 bytes in 0 blocks
==24079==    still reachable: 22,289 bytes in 17 blocks
==24079==         suppressed: 0 bytes in 0 blocks
==24079== Rerun with --leak-check=full to see details of leaked memory
==24079==
==24079== For counts of detected and suppressed errors, rerun with: -v
==24079== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
tpm@kiste12:/test$


bei laufzeitfehler erhällt man live mögliche speicherfehler (meist MEA's) ...
Code:
==25341== Memcheck, a memory error detector
==25341== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==25341== Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info
==25341== Command: ./test
==25341==
==25341== Invalid read of size 8
==25341==    at 0x401966: fb_StrAssignEx (in /test/test)
==25341==    by 0x1101: ???
==25341==  Address 0x5b34730 is 16 bytes inside a block of size 32 free'd
==25341==    at 0x4C29E90: free (vg_replace_malloc.c:473)
==25341==    by 0x40170E: main (test.bas:8)
==25341==
==25341== Invalid read of size 8
==25341==    at 0x401986: fb_StrAssignEx (in /test/test)
==25341==    by 0x1101: ???
==25341==  Address 0x5b34728 is 8 bytes inside a block of size 32 free'd
==25341==    at 0x4C29E90: free (vg_replace_malloc.c:473)
==25341==    by 0x40170E: main (test.bas:8)
==25341==
==25341==
==25341== HEAP SUMMARY:
==25341==     in use at exit: 22,326 bytes in 18 blocks
==25341==   total heap usage: 47 allocs, 29 frees, 31,489 bytes allocated
==25341==
==25341== LEAK SUMMARY:
==25341==    definitely lost: 37 bytes in 1 blocks
==25341==    indirectly lost: 0 bytes in 0 blocks
==25341==      possibly lost: 0 bytes in 0 blocks
==25341==    still reachable: 22,289 bytes in 17 blocks
==25341==         suppressed: 0 bytes in 0 blocks
==25341== Rerun with --leak-check=full to see details of leaked memory
==25341==
==25341== For counts of detected and suppressed errors, rerun with: -v
==25341== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)

... und am ende sieht man, was nicht sauber gelöscht wurde, wenn man die app beendet hat:
Code:

==24079== LEAK SUMMARY:
==24079==    definitely lost: 37 bytes in 1 blocks
==24079==    indirectly lost: 0 bytes in 0 blocks
==24079==      possibly lost: 0 bytes in 0 blocks


Wie du siehst, ist 1 block mit 37 bytes verloren gegangen, bzw. wurde von der app nicht sauber freigegeben.


MfG
TPM

PS: Die Frage finde ich nicht dumm zwinkern

PPS: mit NEW und DELETE wäre das nicht passiert ... durchgeknallt
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2, 3, 4, 5, 6, 7, 8, 9, 10  Weiter
Seite 9 von 10

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz