powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Поглощение памяти сервером
11 сообщений из 36, страница 2 из 2
Поглощение памяти сервером
    #40015267
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Чисто из любопытства: в каком месте экспорта она вызывалась?
В селекте. Уже осознал свою ошибку
...
Рейтинг: 0 / 0
Поглощение памяти сервером
    #40015469
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_> В селекте. Уже осознал свою ошибку

Странно, что на твоей машине не текли. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Поглощение памяти сервером
    #40015488
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Странно, что на твоей машине не текли. :)
У меня домен другой и этих пользователей не было. Да и структура домена сильно проще.

Пока вызов убрал вообще, а как разберусь с проблемой напишу сюда где была ошибка
...
Рейтинг: 0 / 0
Поглощение памяти сервером
    #40015492
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_> Пока вызов убрал вообще

Перенести вызов в начало скрипта 1 раз недостаточно?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Поглощение памяти сервером
    #40015494
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Перенести вызов в начало скрипта 1 раз недостаточно?
Нет. Пользователи могут быть разные. Но вызвать один раз в начале скрипта для всех пользователей нужно. Ну и утечку нужно таки найти
...
Рейтинг: 0 / 0
Поглощение памяти сервером
    #40016023
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
как разберусь с проблемой напишу сюда где была ошибка
Разобрался.

Есть у меня такой класс
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
type
  TUserInfo = class
  strict private
    FSIDStr: string;
    FADsUser: IADsUser;
  strict private
    function GetADsUser: IADsUser;
  public
    constructor Create(const ASIDStr: string);
  end;

constructor TUserInfo.Create(const ASIDStr: string);
begin
  inherited Create;
  FSIDStr := ASIDStr;
end;

function TUserInfo.GetADsUser: IADsUser;
begin
  if FADsUser = nil then begin
    OleCheck(ADsGetObject(
      PChar(Format('LDAP://<SID=%s>', [FSIDStr])),
      IID_IADsUser,
      FADsUser
    ));
    FADsUser.GetInfo;
  end;
  Result := FADsUser;
end;

класс оттестирован и работает.

Для работы с UDF написал наследника
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
type
  TUDFUserInfo = class(TUserInfo)
  public
    constructor Create(const ASIDStr: string);
    destructor Destroy; override;
  end;

constructor TUDFUserInfo.Create(const ASIDStr: string);
begin
  inherited Create(ASIDStr);
  Coinitialize(nil);
end;

destructor TUDFUserInfo.Destroy;
begin
  СoUninitialize;
  inherited Destroy;
end;

Теперь что получалось: в деструкторе TUDFUserInfo вызывался СoUninitialize, а потом при финализации полей класса пытался уничтожиться FADsUser и возникал AV. Отсюда и все утечки.

Что сделал:
в деструкторе TUserInfo явно прибил FADsUser, а в деструкторе TUDFUserInfo перенес вызов СoUninitialize после вызова родительского деструктора
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
destructor TUserInfo.Destroy;
begin
  FADsUser := nil;
  inherited Destroy;
end;

destructor TUDFUserInfo.Destroy;
begin
  inherited Destroy;
  СoUninitialize;
end;


Почему работало у меня? Потому что домен другой, пользователей с такими SID нет и объект FADsUser не создавался.

Остался у меня вопрос как я эту ошибку пропустил, когда тестировал саму UDF, но на этот вопрос уже никто не ответит
...
Рейтинг: 0 / 0
Поглощение памяти сервером
    #40016025
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А AV тупо съедалась что ли, даже не логировалась никуда?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Поглощение памяти сервером
    #40016033
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
AV тупо съедалась
Да
...
Рейтинг: 0 / 0
Поглощение памяти сервером
    #40016062
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Остался у меня вопрос как я эту ошибку пропустил

А у меня остался вопрос зачем вообще CoUninitialize в деструкторе, а не finalization.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Поглощение памяти сервером
    #40016110
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
А у меня остался вопрос зачем вообще CoUninitialize в деструкторе, а не finalization.
Потому, что это UDF и функция может вызываться в произвольных потоках. Поэтому Coinitialize/CoUnititialize дергаются на каждый вызов функции
...
Рейтинг: 0 / 0
Поглощение памяти сервером
    #40016140
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно. Почему-то мне казалось, что они на процесс...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Поглощение памяти сервером
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]