B4R Question SD library memory leak

tzfpg

Active Member
Licensed User
Longtime User
I use timer every 10s to check SD.ListFiles, i find out my memory get less after 10s.
B4X:
Sub timer_Tick
    Log("AvailableRAM ",AvailableRAM)
    For Each f As File In SD.ListFiles("/test")
        Log(f.Name)
    Next
End Sub

B4X:
StackBufferUsage 0
1
AvailableRAM 18184
1
AvailableRAM 17864
1
AvailableRAM 17544
1
AvailableRAM 17224
1
AvailableRAM 16904
1
AvailableRAM 16584
1
AvailableRAM 16264
1
AvailableRAM 15944
1
AvailableRAM 15624
1
AvailableRAM 15304
1
AvailableRAM 14984
1
AvailableRAM 14664
1
AvailableRAM 14344
1
AvailableRAM 14024
1
........

SD.ListFile function eat all my memory until device restart.

how can I solve this problem?
 

Erel

B4X founder
Staff member
Licensed User
Longtime User
I've tested this code with Ardunio and there is no memory leak:
B4X:
Sub Process_Globals
    Public Serial1 As Serial
    Private sd As SD
End Sub

Private Sub AppStart
    Serial1.Initialize(115200)
    Log("AppStart")
    Log(sd.Initialize(4)) '4 is the CS pin when using the ethernet shield
    For i = 1 To 100
        ListFiles
        Log("********************************** ", AvailableRAM)
    Next
End Sub


Sub ListFiles
    For Each f As File In sd.ListFiles("/")
        Log(f.Name, TAB, Round(f.Size / 1024), "kb", TAB, f.IsDirectory)
    Next
End Sub

Might be an issue specific to ESP8266.
If you can please add some debug messages in rSD.cpp:
First one in FileIterator::MoveNext:
B4X:
    bool FileIterator::MoveNext() {
        
        current->file.close();
        current->file = dir.openNextFile();
        if (current->file == false) {
            ::Serial.println("closing dir"); //<-------------------
            dir.close();
            return false;
        } else {
            return true;
        }
    }

Do you see this message in the logs?
 
Upvote 0

tzfpg

Active Member
Licensed User
Longtime User
I add the code to rSD.cpp, I can see the "closing dir" log, the memory still leaking.
B4X:
********************* PROGRAM STARTING ****************
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 47032
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 46720
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 46408
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 46096
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 45784
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 45472
System Volume Information    0kb    1
SDExistsStatus    0kb    0
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 47032
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 46720
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 46408
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 46096
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 45784
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 45472
System Volume Information    0kb    1
SDExistsStatus    0kb    0
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 47032
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 46720
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 46408
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 46096
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 45784
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 45472
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 45160
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 44848
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 44536
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 44224
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 43912
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 43600
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 43288
System Volume Information    0kb    1

SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 42976
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 42664
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 42352
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 42040
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 41728
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 41416
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 41104
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 40792
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 40480
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 40168
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 39856
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 39544
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 39232
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 38920
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 38608
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 38296
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 37984
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 37672
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 37360
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 37048
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 36736
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 36424
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 36112
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 35800
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 35488
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 35176
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 34864
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 34552
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 34240
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 33928
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 33616
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 33304
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 32992
System Volume Information    0kb    1

SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 32680
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 32368
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 32056
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 31744
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 31432
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 31120
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 30808
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 30496
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 30184
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 29872
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 29560
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 29248
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 28936
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 28624
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 28312
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 28000
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 27688
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 27376
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 27064
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 26752
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 26440
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 26128
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 25816
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 25504
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 25192
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 24568
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 24568
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 24256
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 23944
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 23632
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 23320
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 22696
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 22696
System Volume Information    0kb    1

SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 22384
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 22072
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 21760
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 21448
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 21136
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 20824
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 20512
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 20200
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 19888
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 19576
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 19264
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 18952
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 18640
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 18328
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 18016
System Volume Information    0kb    1
SDExistsStatus    0kb    0
test    0kb    1
closing dir
********************************** 17704
 
Upvote 0

tzfpg

Active Member
Licensed User
Longtime User
Esp8266 need save many files in SD card, when esp8266 going online and need send back to server repetitively
 
Upvote 0

tzfpg

Active Member
Licensed User
Longtime User
But why do you need to list all files each time?

Far from an ideal solution but you can restart it automatically from time to time.
because we need to know SD card is it have a files need to send back to server, thats why we need list all files each time
 
Upvote 0
Top