Re: new / delete в UDF

2011-11-29 Пенетрантность Vlad Khorsun

Vladimir ...

С сетевым коннектом ошибка проявляется по-другому, и isql при этом не
падает.

SQL SELECT TestInsert(333) from RDB$Database;

 TESTINSERT

Statement failed, SQLCODE = -902
Error reading data from the connection.
SQL quit;


   Это действительно 2.1.3 ? Не 2.0.х ?
В firebird.log на сервере есть что-то ?
Есть возможность проверить 2.5 ?

--
Хорсун Влад 





Re: new / delete в UDF

2011-11-29 Пенетрантность Vladimir
 Вариант 3. Пытаюсь перегрузить операторы new и delete.
 Попробуй в этом варианте сделать операторы инлайновыми или разместить их
 в неименованном пространстве имён.
 Т. е. скрыть от линкера.


Пробовал объявить свои перегруженные операторы как inline - все равно
в udf управление на них не передается.


 Похоже, линкер/загрузчик где-то путается с разрешением символов и вместо
 rtl-ных new/delete подставляет какие-то левые.


Тут немного непонятно.
Если в моей udf используются new/delete от firebird, то почему они
приводят к ошибке?
Может быть, дело в другом?
Например, такая ситуация.
Firebird работает, что-то размещает своим new.
Потом загружается моя библиотека, и firebird с этого момента
переключается на загруженные с ней new, delete из libstdc++
При этом использует чужой delete для чего-то, размещенного ранее своим
new.


С уважением, Владимир.


Re: new / delete в UDF

2011-11-29 Пенетрантность Vlad Khorsun

Vladimir ...


Похоже, линкер/загрузчик где-то путается с разрешением символов и вместо
rtl-ных new/delete подставляет какие-то левые.



Тут немного непонятно.
Если в моей udf используются new/delete от firebird, то почему они
приводят к ошибке?
Может быть, дело в другом?
Например, такая ситуация.
Firebird работает, что-то размещает своим new.
Потом загружается моя библиотека, и firebird с этого момента
переключается на загруженные с ней new, delete из libstdc++
При этом использует чужой delete для чего-то, размещенного ранее своим
new.


   Именно это и было моим первым предположением. Только оно касалось
экспортированных new\delete из UDF.

--
Хорсун Влад 





Re: new / delete в UDF

2011-11-29 Пенетрантность Vladimir
Проблема в том, что по умолчанию линкер gcc экспортирует все ф-ции.
 Соответственно, UDF цепляет delete движка (embedded коннект), или isql.
 Движок в 2.5 вроде как уже поправили на этот счёт, но утилиты по прежнему
 всё выставляют наружу.

Но тогда ведь и new бы цеплялась?
Или в чем-то условия для этих двух операторов отличаются?

Моя громоздкая UDF заработала.
Еще раз большое спасибо за решение.

С уважением, Владимир.



Re: new / delete в UDF

2011-11-28 Пенетрантность Khorsun Vlad

Vladimir ...

Спасибо за совет.
Очень было похоже, что это может помочь, но никакие опции редактора не
изменили ситуацию.


   Какого-такого редактора ?


Пробовал --no-export-dynamic  --exclude-libs, никакого эффекта.


   Какая версия Firebird ?

   Есть возможность пройтись отладчиком по коду UDF и посмотреть - что
за delete он вызывает?

--
Хорсун Влад 





Re: new / delete в UDF

2011-11-28 Пенетрантность Khorsun Vlad

Vladimir ...

   А каким образом проверяется работоспособность UDF ?
Запросы выполняются в isql с локальным коннектом ?
Сетевой коннект не пробовал ?

--
Хорсун Влад 





Re: new / delete в UDF

2011-11-28 Пенетрантность Vladimir
Да, все в isql с локальным коннектом.
Имеет смысл попробовать сетевой коннект?

С уважением, Владимир.

Re: new / delete в UDF

2011-11-28 Пенетрантность Vlad Khorsun

Vladimir ...

Да, все в isql с локальным коннектом.
Имеет смысл попробовать сетевой коннект?


   Да

--
Хорсун Влад 





Re: new / delete в UDF

2011-11-28 Пенетрантность Tonal
28.11.2011 18:27, Vladimir пишет:
 Вариант 3. Пытаюсь перегрузить операторы new и delete.
Попробуй в этом варианте сделать операторы инлайновыми или разместить их
в неименованном пространстве имён.
Т. е. скрыть от линкера.

Похоже, линкер/загрузчик где-то путается с разрешением символов и вместо
rtl-ных new/delete подставляет какие-то левые.

Попробуй запустить под strace и/или gdb.
-- 
Александр Замараев



Re: new / delete в UDF

2011-11-21 Пенетрантность Vladimir


On Nov 18, 11:08 am, Khorsun Vlad hv...@optima.com.ua wrote:
 Vladimir ...

  !

  Linux UDF, gcc,
  :

   long* aTestItem = new long;
   delete aTestItem;

  Segmentation fault delete.

     ,
 .so ӣ .

 --


Re: new / delete в UDF

2011-11-21 Пенетрантность Vladimir
Спасибо за совет.
Очень было похоже, что это может помочь, но никакие опции редактора не
изменили ситуацию.
Пробовал --no-export-dynamic  --exclude-libs, никакого эффекта.

С уважением, Владимир.

Re: new / delete в UDF

2011-11-17 Пенетрантность Khorsun Vlad

Vladimir ...

Здравствуйте!

При попытке в Linux использовать UDF, собранную в gcc, столкнулся со
следующим:

 long* aTestItem = new long;
 delete aTestItem;

вызывает ошибку Segmentation fault на операторе delete.


   Насколько я помню, нужно явно сказать линкеру не экспортировать
из .so всё подряд.

--
Хорсун Влад