View Issue Details

IDProjectCategoryView StatusLast Update
0000408Far Manager_Commonpublic2007-12-18 03:05
Reportervsergiy Assigned Tovskirdin  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Fixed in Version1.80 alpha 1 
Summary0000408: Memory leak in struct MacroState
Descriptionstruct MacroState doesn’t have a destructor, so memory leak caused by TVarTable *locVarTable struct member.
TagsNo tags attached.
Build390

Activities

vskirdin

2007-12-04 04:01

administrator   bugnote:0000946

А он там нужен?
Эта запись по наитию заведена (т.е. без применения тех.средст)?

KeyMacro::~KeyMacro()
{
  InitInternalVars();
}

void KeyMacro::InitInternalVars(BOOL InitedRAM)
{
...
  if(InitedRAM)
  {
    ReleaseWORKBuffer(TRUE);
...
}

void KeyMacro::ReleaseWORKBuffer(BOOL All)
{
  if(Work.MacroWORK)
  {
...
      if(Work.AllocVarTable)
>>> deleteVTable(*Work.locVarTable);
      Work.MacroWORK=NULL;
...
}

void deleteVTable(TVarTable table)
{
  for ( int i = 0 ; i < V_TABLE_SIZE ; i++ )
...
      delete table[i];
...
}

vsergiy

2007-12-04 04:33

reporter   bugnote:0000947

Элементы из таблицы удаляются, но память выделенная для таблицы (23 указателя) не освобождается.

vskirdin

2007-12-04 04:58

administrator   bugnote:0000948

ок

alexy

2007-12-07 07:39

administrator   bugnote:0000968

Валя, глянь на это, я что то не пойму когда эту фигню можно освобождать.

alexy

2007-12-07 07:50

administrator   bugnote:0000970

Мы тут с DrKnS уже разобрались.

alexy

2007-12-08 09:05

administrator   bugnote:0000972

387

vsergiy

2007-12-10 02:48

reporter   bugnote:0000983

Нужно еще добавить освобождение памяти в деструкторе ~KeyMacro().

Index: macro.cpp
===================================================================
--- macro.cpp (revision 1386)
+++ macro.cpp (working copy)
@@ -310,6 +310,13 @@
 KeyMacro::~KeyMacro()
 {
   InitInternalVars();
+
+ if (Work.AllocVarTable)
+ {
+ xf_free(Work.locVarTable);
+ Work.locVarTable=NULL;
+ Work.AllocVarTable=false;
+ }
 }
 
 void KeyMacro::InitInternalLIBVars()

alexy

2007-12-10 09:38

administrator   bugnote:0000989

Так там же в InitInternalVars вызывается ReleaseWORKBuffer который это и делает.

vsergiy

2007-12-10 15:39

reporter   bugnote:0000995

KeyMacro::ReleaseWORKBuffer() освобождает память только если работает условие:

if(Work.MacroWORK)
{
  ...
}

vskirdin

2007-12-12 14:01

administrator   bugnote:0001018

тыкс... перебор вышел с Work.locVarTable :-(
Сам "Work.locVarTable" нужно удалять только в деструкторе. В остальных случаях - только содержимое таблицы.
Сам сделаю.

vskirdin

2007-12-14 04:12

administrator   bugnote:0001038

see 390

Issue History

Date Modified Username Field Change
2007-12-04 03:09 vsergiy New Issue
2007-12-04 04:01 vskirdin Note Added: 0000946
2007-12-04 04:33 vsergiy Note Added: 0000947
2007-12-04 04:58 vskirdin Note Added: 0000948
2007-12-04 12:34 alexy Status new => assigned
2007-12-04 12:34 alexy Assigned To => alexy
2007-12-07 07:38 alexy Assigned To alexy => vskirdin
2007-12-07 07:39 alexy Note Added: 0000968
2007-12-07 07:50 alexy Assigned To vskirdin => alexy
2007-12-07 07:50 alexy Note Added: 0000970
2007-12-08 09:05 alexy Build => 387
2007-12-08 09:05 alexy Status assigned => closed
2007-12-08 09:05 alexy Note Added: 0000972
2007-12-08 09:05 alexy Resolution open => fixed
2007-12-08 09:05 alexy Fixed in Version => 1.80 alpha 1
2007-12-10 02:48 vsergiy Note Added: 0000983
2007-12-10 02:48 vsergiy Status closed => assigned
2007-12-10 02:48 vsergiy Resolution fixed => reopened
2007-12-10 09:38 alexy Note Added: 0000989
2007-12-10 09:38 alexy Status assigned => feedback
2007-12-10 15:39 vsergiy Note Added: 0000995
2007-12-12 14:01 vskirdin Note Added: 0001018
2007-12-12 14:01 vskirdin Assigned To alexy => vskirdin
2007-12-12 14:01 vskirdin Status feedback => assigned
2007-12-14 04:12 vskirdin Note Added: 0001038
2007-12-14 04:12 vskirdin Status assigned => feedback
2007-12-14 20:58 vsergiy Status feedback => resolved
2007-12-14 20:58 vsergiy Resolution reopened => fixed
2007-12-18 03:05 vskirdin Build 387 => 390
2007-12-18 03:05 vskirdin Status resolved => closed