Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Wie findet Ihr dieses Projekt? |
Super |
|
80% |
[ 16 ] |
Gut |
|
10% |
[ 2 ] |
Mittelmässig |
|
10% |
[ 2 ] |
Schlecht (Warum?) |
|
0% |
[ 0 ] |
Scheisse (Warum?) |
|
0% |
[ 0 ] |
|
Stimmen insgesamt : 20 |
|
Autor |
Nachricht |
AxelNiedenhoff
Anmeldungsdatum: 24.03.2016 Beiträge: 8
|
Verfasst am: 24.03.2016, 17:17 Titel: |
|
|
Danke für den Hinweis auf SNC! Und es ist auch schön zu wissen, dass es bei TSNE weitergeht … |
|
Nach oben |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 25.03.2016, 01:35 Titel: |
|
|
@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 |
|
|
St_W
Anmeldungsdatum: 22.07.2007 Beiträge: 954 Wohnort: Austria
|
Verfasst am: 25.03.2016, 05:22 Titel: |
|
|
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 |
|
|
AxelNiedenhoff
Anmeldungsdatum: 24.03.2016 Beiträge: 8
|
Verfasst am: 29.03.2016, 20:02 Titel: |
|
|
@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 |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 06.04.2016, 02:16 Titel: |
|
|
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.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
AxelNiedenhoff
Anmeldungsdatum: 24.03.2016 Beiträge: 8
|
Verfasst am: 06.04.2016, 21:55 Titel: |
|
|
Die neue Version funktioniert unter Win64. Danke! |
|
Nach oben |
|
|
Keltin
Anmeldungsdatum: 23.08.2012 Beiträge: 10
|
Verfasst am: 18.11.2016, 10:57 Titel: |
|
|
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 |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 18.11.2016, 12:06 Titel: |
|
|
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 |
|
|
Keltin
Anmeldungsdatum: 23.08.2012 Beiträge: 10
|
Verfasst am: 18.11.2016, 15:28 Titel: |
|
|
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 |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 18.11.2016, 15:38 Titel: |
|
|
Hab da noch kurz zwei fragen:
* welches Betriebssystem verwendest du?
* welche FBC Version?
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
Keltin
Anmeldungsdatum: 23.08.2012 Beiträge: 10
|
Verfasst am: 18.11.2016, 16:04 Titel: |
|
|
Debian 8 (x64) und Windows 10 (x64)
FBC ist in beiden Fällen 1.05.0 (x86) |
|
Nach oben |
|
|
MOD Fleißiger Referenzredakteur
Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 27.11.2016, 12:08 Titel: |
|
|
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 |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 28.11.2016, 14:11 Titel: |
|
|
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 |
|
|
MOD Fleißiger Referenzredakteur
Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 28.11.2016, 14:17 Titel: |
|
|
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 |
|
|
Keltin
Anmeldungsdatum: 23.08.2012 Beiträge: 10
|
Verfasst am: 02.03.2017, 15:51 Titel: |
|
|
Hi,
ich wollte nur mal fragen ob es schon irgend welche Erkenntnisse über das Problem in TSNE_Ping gibt?
MfG
Keltin |
|
Nach oben |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 03.05.2021, 00:25 Titel: |
|
|
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 ... _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4637 Wohnort: ~/
|
Verfasst am: 03.05.2021, 00:37 Titel: |
|
|
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 |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 03.05.2021, 01:11 Titel: |
|
|
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 ...
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1230 Wohnort: Ruhrpott
|
Verfasst am: 03.05.2021, 10:44 Titel: |
|
|
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 |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 03.05.2021, 11:44 Titel: |
|
|
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
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
PPS: mit NEW und DELETE wäre das nicht passiert ... _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
|