Firebird и C++
Привет всем.
Вследствие переезда SVN-репозитория Firebird (теперь он доступен по адресу http://svn.code.sf.net/p/firebird/code), пришлось заново его выкачивать — я не стал разбираться с тем, как перебиндить мою текущую локальную копию к новому репозитарию. После решил посмотреть содержимое пары случайных исходных файлов. В качестве отправной точки для выборки взял результаты поиска слов «CreateEvent» и «addref».
Комментировать код, наверное, нет смысла. Оно и так все понятно…
CreateEvent
файл «src/common/classes/conditional.h»
class Condition
{
private:
//...
HANDLE events[MAX_EVENTS];
void init()
{
events[SIGNAL] = CreateEvent(NULL, FALSE, FALSE, NULL);
events[BROADCAST] = CreateEvent(NULL, TRUE, FALSE, NULL);
if (!events[SIGNAL] || !events[BROADCAST])
system_call_failed::raise("CreateCondition(Event)");
}
public:
Condition() { init(); }
explicit Condition(MemoryPool&) { init(); }
~Condition()
{
if (events[SIGNAL] && !CloseHandle(events[SIGNAL]))
system_call_failed::raise("CloseHandle(SIGNAL)");
if (events[BROADCAST] && !CloseHandle(events[BROADCAST]))
system_call_failed::raise("CloseHandle(BROADCAST)");
}
//...
AddRef
файл «src/yvalve/DistributedTransaction.cpp»
YTransaction* FB_CARG Dtc::start(IStatus* status,
unsigned int cnt,
DtcStart* components)
{
try
{
status->init();
RefPtr<DTransaction> dtransaction(new DTransaction);
//...
dtransaction->addRef();
return new YTransaction(NULL, dtransaction);
}
catch (const Exception& ex)
{
ex.stuffException(status);
}
return NULL;
}
![Состояние процесса FB 2.5.3.26543 SuperClassic x64 [win]](https://firebirder.ru/wp-content/uploads/2013/03/2013_03_04__test_2012_10_13__server_perfomance.png)
Alex on 31 января, 2013
Дима, если ты хошь достучаться до аффтара — надо писать по бразильски (ну в крайнем случеа по английски). И не здесь 🙂