Translate

2018년 7월 6일 금요일

꿈의 입력기 nimf 이야기 2화 - 어이없는 버그

매일 피곤한 상태에서 개발하다보니 어이없는 버그가 있었습니다.
복붙을 했었는데 변수 이름을 변경하다가 말아서 그게 버그의 간접적 원인이 되었습니다.
변수 하이라이팅 기능이 있었다면 피할 수 있었던 버그인데 말입니다.
그래서 개발 툴로 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 는 매우 견고한 입력기가 되어 있을 것입니다.
오늘도 열심히 달립니다.

댓글 없음:

댓글 쓰기

응용 어플 끝글자 버그 잡는 거 진짜 개쉽습니다

그 동안 제가 끝글자 버그를 잡지 않고 방치한 이유 우선 책임, 의무가 없습니다. 제가 해당 어플 개발자도 아닐 뿐더러 오픈소스가 원래가 유지보수 의무, 보증 책임이 없습니다 . 이렇게 개떡 같은 게 오픈소스입니다. 전 과거 libhwp 하냐고...