매일 피곤한 상태에서 개발하다보니 어이없는 버그가 있었습니다.
복붙을 했었는데 변수 이름을 변경하다가 말아서 그게 버그의 간접적 원인이 되었습니다.
변수 하이라이팅 기능이 있었다면 피할 수 있었던 버그인데 말입니다.
그래서 개발 툴로 geany 를 사용했었는데 gnome-builder 로 바꾸기로 결정했습니다.
전에 firefox 실행해 놓은 상태에서
killall nimf
nimf --start-indicator
nimf 를 두세번 죽였다 살렸다 하면 firefox 가 죽는 현상이 있었습니다.
이것은 nimf 버그로 밝혀졌는데, 애석하게도 저는 왜 저런 현상이 발생하는지 아직도 이해를 못하고 있습니다.
아마, 응용 어플에서 또다른 디스패쳐가 작동해서 이런 문제가 발생하지 않았을까 추정하고 있습니다.
그래서, 글로벌 변수를 g_object_unref() 한 후, NULL 을 대입했습니다.
그 후 또다시 이러한 현상이 발생하면 thread-safe 스레드에 안전하게 설계해야 합니다.
g_weak_ref_init ()
void
g_weak_ref_init (GWeakRef *weak_ref,
gpointer object);
Initialise a non-statically-allocated GWeakRef.
This function also calls g_weak_ref_set() with object on the freshly-initialised weak reference.
This function should always be matched with a call to g_weak_ref_clear(). It is not necessary to use this function for a GWeakRef in static storage because it will already be properly initialised. Just use g_weak_ref_set() directly.
GWeakRef 를 이용하면 g_object_unref() 로 객체가 ref count 가 0 이 되었을 때, 아마 NULL 값을 대입해 줄 겁니다.
정확한 사용법을 몰라서 아직 사용하지 않을 뿐입니다. 때가 되면 하겠죠.ㅋㅋ
이렇게 점점 시간이 흐르다보면 nimf 는 매우 견고한 입력기가 되어 있을 것입니다.
오늘도 열심히 달립니다.
댓글 없음:
댓글 쓰기