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; }
Alex on 31 января, 2013
Дима, если ты хошь достучаться до аффтара — надо писать по бразильски (ну в крайнем случеа по английски). И не здесь 🙂