Changeset 123 in libcf


Ignore:
Timestamp:
06/12/13 13:28:21 (11 years ago)
Author:
cheese
Message:

#1 fix windows bug for r122

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/cf_error.h

    r122 r123  
    6969#define CF_ERROR_MUTEX_CREATE               CF_ERROR_MUTEX - 2
    7070#define CF_ERROR_MUTEX_INVALID_CTX          CF_ERROR_MUTEX - 3
     71#define CF_ERROR_MUTEX_INVALID_ARGS         CF_ERROR_MUTEX - 4
    7172/* }}} mutex */
    7273
  • trunk/src/cf_log.c

    r122 r123  
    44 * \author  vfire
    55 *
    6  * \brief 로그 구현
     6 * \brief ·Î±× ±¸Çö
    77 */
    88#if defined(_WIN32) || defined(_WIN64)
     
    5959#define LOG_DATETIME_LENGTH             sizeof ("0000-00-00 00:00:00.000") - 1
    6060
    61 /** 로그 컨텍스트 (Opaque) */
     61/** ·Î±× ÄÁÅؽºÆ® (Opaque) */
    6262typedef void *  CF_Log_Ctx;
    6363
     
    7575} CF_LOG_DATETIME;
    7676
    77 /** 로그 컨텍스트 (CF_Log_Ctx의 구현) */
     77/** ·Î±× ÄÁÅؽºÆ® (CF_Log_CtxÀÇ ±¸Çö) */
    7878typedef struct __cf_log_ctx__
    7979{
     
    195195
    196196/**
    197  * 로그 데이터 처리
    198  *
    199  * \return 성공 시, CF_OK; 실패 시, 오류 코드
    200  *
    201  * \param ctx           로그 컨텍스트
    202  * \param buffer        로그 데이터
    203  * \param demandSize    로그 데이터 길이
     197 * ·Î±× µ¥ÀÌÅÍ Ã³¸®
     198 *
     199 * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
     200 *
     201 * \param ctx           ·Î±× ÄÁÅؽºÆ®
     202 * \param buffer        ·Î±× µ¥ÀÌÅÍ
     203 * \param demandSize    ·Î±× µ¥ÀÌÅÍ ±æÀÌ
    204204 *
    205205 * \author vfire
     
    212212    int result = CF_OK;
    213213
    214     if (ctx->size > 0) /* 버퍼단위 버퍼링.... */
     214    if (ctx->size > 0) /* ¹öÆÛ´ÜÀ§ ¹öÆÛ¸µ.... */
    215215    {
    216216        size_t writeSize;
     
    231231        }
    232232    }
    233     else /* flush되어야 함. */
     233    else /* flushµÇ¾î¾ß ÇÔ. */
    234234    {
    235235        ctx->buffer = (char *)buffer;
     
    243243
    244244/**
    245  * 로그 컨텍스트에 멀티쓰레드 모드 설정
    246  *
    247  * \return 성공 시, CF_OK; 실패 시, 오류 코드
    248  *
    249  * \param ctx 로그 컨텍스트
     245 * ·Î±× ÄÁÅؽºÆ®¿¡ ¸ÖƼ¾²·¹µå ¸ðµå ¼³Á¤
     246 *
     247 * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
     248 *
     249 * \param ctx ·Î±× ÄÁÅؽºÆ®
    250250 *
    251251 * \see CF_Log_UnsetMultiThread
     
    265265
    266266/**
    267  * 로그 컨텍스트에 멀티쓰레드 모드 설정 해제
    268  *
    269  * \return 성공 시, CF_OK; 실패 시, 오류 코드
    270  *
    271  * \param ctx 로그 컨텍스트
     267 * ·Î±× ÄÁÅؽºÆ®¿¡ ¸ÖƼ¾²·¹µå ¸ðµå ¼³Á¤ ÇØÁ¦
     268 *
     269 * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
     270 *
     271 * \param ctx ·Î±× ÄÁÅؽºÆ®
    272272 *
    273273 * \see CF_Log_SetMultiThread
     
    289289
    290290/**
    291  * 로그 컨텍스트에 따라 로그 쓰기
    292  *
    293  * \return 성공 시, CF_OK; 실패 시, 오류 코드
    294  *
    295  * \param ctx       로그 컨텍스트
    296  * \param prefix    로그의 프리픽스 문자열
    297  * \param fmt       포맷 스트링
    298  * \param ...       가변 인자
     291 * ·Î±× ÄÁÅؽºÆ®¿¡ µû¶ó ·Î±× ¾²±â
     292 *
     293 * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
     294 *
     295 * \param ctx       ·Î±× ÄÁÅؽºÆ®
     296 * \param prefix    ·Î±×ÀÇ ÇÁ¸®ÇȽº ¹®ÀÚ¿­
     297 * \param fmt       Æ÷¸Ë ½ºÆ®¸µ
     298 * \param ...       °¡º¯ ÀÎÀÚ
    299299 */
    300300static int
     
    330330
    331331/**
    332  * 로그 버퍼의 데이터를 즉시 로그 파일에 쓰기
    333  *
    334  * \return 성공 시, CF_OK; 실패 시, 오류 코드
    335  *
    336  * \param ctx 로그 컨텍스트
     332 * ·Î±× ¹öÆÛÀÇ µ¥ÀÌÅ͸¦ Áï½Ã ·Î±× ÆÄÀÏ¿¡ ¾²±â
     333 *
     334 * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
     335 *
     336 * \param ctx ·Î±× ÄÁÅؽºÆ®
    337337 */
    338338static int
     
    351351
    352352/**
    353  * 로그 컨텍스트 해제
    354  *
    355  * \return 성공 시, CF_OK; 실패 시, 오류 코드
    356  *
    357  * \param ctx 로그 컨텍스트
     353 * ·Î±× ÄÁÅؽºÆ® ÇØÁ¦
     354 *
     355 * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
     356 *
     357 * \param ctx ·Î±× ÄÁÅؽºÆ®
    358358 */
    359359static int
     
    381381
    382382/**
    383  * 로그 컨텍스트 생성
    384  *
    385  * \return 성공 시, 로그 컨텍스트; 실패 시, NULL
    386  *
    387  * \param ctx       로그 컨텍스트 주소
    388  * \param path      로그 파일 경로
    389  * \param memsize   로그 버퍼 크기
     383 * ·Î±× ÄÁÅؽºÆ® »ý¼º
     384 *
     385 * \return ¼º°ø ½Ã, ·Î±× ÄÁÅؽºÆ®; ½ÇÆÐ ½Ã, NULL
     386 *
     387 * \param ctx       ·Î±× ÄÁÅؽºÆ® ÁÖ¼Ò
     388 * \param path      ·Î±× ÆÄÀÏ °æ·Î
     389 * \param memsize   ·Î±× ¹öÆÛ Å©±â
    390390 *
    391391 * \see CF_LOG_DEFAULT_BUFFER, CF_LOG_NO_BUFFER
     
    446446
    447447/**
    448  * 로그 컨텍스트에 아이디 넘버 할당<br />
    449  * 로그 기록 시, 아이디 넘버를 사용하면 해당 로그로 기록할 수 있음
    450  *
    451  * \return 성공 시, CF_OK; 실패 시, 오류 코드
    452  *
    453  * \param mapid 부여할 아이디 넘버
    454  * \param ctx   로그 컨텍스트
    455  *
    456  * \remarks 반드시 먼저 초기화 해야하며, 초기화 시에 주어진 번호보다 작은 아이디 넘버를 사용
     448 * ·Î±× ÄÁÅؽºÆ®¿¡ ¾ÆÀ̵ð ³Ñ¹ö ÇÒ´ç<br />
     449 * ·Î±× ±â·Ï ½Ã, ¾ÆÀ̵ð ³Ñ¹ö¸¦ »ç¿ëÇϸé ÇØ´ç ·Î±×·Î ±â·ÏÇÒ ¼ö ÀÖÀ½
     450 *
     451 * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
     452 *
     453 * \param mapid ºÎ¿©ÇÒ ¾ÆÀ̵ð ³Ñ¹ö
     454 * \param ctx   ·Î±× ÄÁÅؽºÆ®
     455 *
     456 * \remarks ¹Ýµå½Ã ¸ÕÀú ÃʱâÈ­ ÇؾßÇϸç, ÃʱâÈ­ ½Ã¿¡ ÁÖ¾îÁø ¹øÈ£º¸´Ù ÀÛÀº ¾ÆÀ̵ð ³Ñ¹ö¸¦ »ç¿ë
    457457 *
    458458 * \see CF_LOG_OPEN, CF_Log_CreateCtx
     
    472472
    473473/**
    474  * 아이디 넘버에 해당하는 로그를 닫고 해당하는 컨텍스트를 해제
    475  *
    476  * \return 성공 시, CF_OK; 실패 시, 오류 코드
    477  *
    478  * \param mapid 로그의 아이디 넘버
    479  *
    480  * \remarks 아이디 넘버에 해당하는 컨텍스트가 해제되므로 주의
     474 * ¾ÆÀ̵ð ³Ñ¹ö¿¡ ÇØ´çÇÏ´Â ·Î±×¸¦ ´Ý°í ÇØ´çÇÏ´Â ÄÁÅؽºÆ®¸¦ ÇØÁ¦
     475 *
     476 * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
     477 *
     478 * \param mapid ·Î±×ÀÇ ¾ÆÀ̵ð ³Ñ¹ö
     479 *
     480 * \remarks ¾ÆÀ̵ð ³Ñ¹ö¿¡ ÇØ´çÇÏ´Â ÄÁÅؽºÆ®°¡ ÇØÁ¦µÇ¹Ç·Î ÁÖÀÇ
    481481 *
    482482 * \see CF_LOG_CLOSE, CF_Log_DestroyCtx
     
    498498
    499499/**
    500  * 아이디 넘버에 해당하는 로그 컨텍스트를 얻기
    501  *
    502  * \return 성공 시, CF_OK; 실패 시, 오류 코드
    503  *
    504  * \param mapid 로그의 아이디 넘버
    505  * \param ctx   로그 컨텍스트 받을 주소
     500 * ¾ÆÀ̵ð ³Ñ¹ö¿¡ ÇØ´çÇÏ´Â ·Î±× ÄÁÅؽºÆ®¸¦ ¾ò±â
     501 *
     502 * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
     503 *
     504 * \param mapid ·Î±×ÀÇ ¾ÆÀ̵ð ³Ñ¹ö
     505 * \param ctx   ·Î±× ÄÁÅؽºÆ® ¹ÞÀ» ÁÖ¼Ò
    506506 */
    507507static int
     
    519519
    520520/**
    521  * 로그를 사용하기 위해 초기화
    522  *
    523  * \return 성공 시, CF_OK; 실패 시, 오류 코드
    524  *
    525  * \param poolSize  로그 풀 크기로, 로그 아이디 넘버의 최대 값
     521 * ·Î±×¸¦ »ç¿ëÇϱâ À§ÇØ ÃʱâÈ­
     522 *
     523 * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
     524 *
     525 * \param poolSize  ·Î±× Ç® Å©±â·Î, ·Î±× ¾ÆÀ̵ð ³Ñ¹öÀÇ ÃÖ´ë °ª
    526526 */
    527527int
     
    543543
    544544/**
    545  * 로그가 모두 사용된 후 자원 해제
    546  *
    547  * \return CF_OK 반환
     545 * ·Î±×°¡ ¸ðµÎ »ç¿ëµÈ ÈÄ ÀÚ¿ø ÇØÁ¦
     546 *
     547 * \return CF_OK ¹Ýȯ
    548548 */
    549549int
     
    566566
    567567/**
    568  * 로그 열기
    569  *
    570  * \return 성공 시, CF_OK; 실패 시, 오류 코드
    571  *
    572  * \param mapid     로그의 아이디 넘버
    573  * \param path      로그 파일 경로
    574  * \param memsize   로그 버퍼 크기
     568 * ·Î±× ¿­±â
     569 *
     570 * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
     571 *
     572 * \param mapid     ·Î±×ÀÇ ¾ÆÀ̵ð ³Ñ¹ö
     573 * \param path      ·Î±× ÆÄÀÏ °æ·Î
     574 * \param memsize   ·Î±× ¹öÆÛ Å©±â
    575575 *
    576576 * \see CF_LOG_DEFAULT_BUFFER, CF_LOG_NO_BUFFER
     
    596596
    597597/**
    598  * 로그 닫기
    599  *
    600  * \return 성공 시, CF_OK; 실패 시, 오류 코드
    601  *
    602  * \param mapid 로그의 아이디 넘버
     598 * ·Î±× ´Ý±â
     599 *
     600 * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
     601 *
     602 * \param mapid ·Î±×ÀÇ ¾ÆÀ̵ð ³Ñ¹ö
    603603 */
    604604int
     
    609609
    610610/**
    611  * 로그 버퍼의 데이터를 즉시 로그 파일에 쓰기
    612  *
    613  * \return 성공 시, CF_OK; 실패 시, 오류 코드
    614  *
    615  * \param mapid 로그의 아이디 넘버
     611 * ·Î±× ¹öÆÛÀÇ µ¥ÀÌÅ͸¦ Áï½Ã ·Î±× ÆÄÀÏ¿¡ ¾²±â
     612 *
     613 * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
     614 *
     615 * \param mapid ·Î±×ÀÇ ¾ÆÀ̵ð ³Ñ¹ö
    616616 */
    617617int
     
    631631
    632632/**
    633  * 로그 컨텍스트에 멀티쓰레드 모드 설정
    634  *
    635  * \return 성공 시, CF_OK; 실패 시, 오류 코드
    636  *
    637  * \param mapid 로그의 아이디 넘버
    638  * \param flag  설정/해제 bool 플래그
     633 * ·Î±× ÄÁÅؽºÆ®¿¡ ¸ÖƼ¾²·¹µå ¸ðµå ¼³Á¤
     634 *
     635 * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
     636 *
     637 * \param mapid ·Î±×ÀÇ ¾ÆÀ̵ð ³Ñ¹ö
     638 * \param flag  ¼³Á¤/ÇØÁ¦ bool Ç÷¡±×
    639639 *
    640640 * \see CF_BOOL
     
    658658
    659659/**
    660  * 로그 쓰기
    661  *
    662  * \return 성공 시, CF_OK; 실패 시, 오류 코드
    663  *
    664  * \param mapid     로그의 아이디 넘버
    665  * \param prefix    로그의 프리픽스 문자열
    666  * \param fmt       포맷 스트링
    667  * \param ...       가변 인자
     660 * ·Î±× ¾²±â
     661 *
     662 * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
     663 *
     664 * \param mapid     ·Î±×ÀÇ ¾ÆÀ̵ð ³Ñ¹ö
     665 * \param prefix    ·Î±×ÀÇ ÇÁ¸®ÇȽº ¹®ÀÚ¿­
     666 * \param fmt       Æ÷¸Ë ½ºÆ®¸µ
     667 * \param ...       °¡º¯ ÀÎÀÚ
    668668 */
    669669int
  • trunk/src/cf_thread.c

    r122 r123  
    5252{
    5353#if defined(_WIN32) || defined(_WIN64)
     54    if (tid == NULL)
     55        return CF_ERROR_THREAD_INVALID_ARGS;
     56
    5457    CloseHandle (tid);
    5558#endif
     
    6265{
    6366#if defined(_WIN32) || defined(_WIN64)
     67    if (mid == NULL)
     68        return CF_ERROR_MUTEX_INVALID_ARGS;
     69
    6470    CloseHandle (mid);
    6571#else
     
    230236#if defined(_WIN32) || defined(_WIN64)
    231237        context->mid = CreateMutexA (NULL, FALSE, NULL);
    232         if (*ctx == NULL)
     238        if (context->mid == NULL)
    233239        {
    234240            result = CF_ERROR_MUTEX_CREATE;
     
    243249        }
    244250#endif
     251
     252        *ctx = context;
    245253    }
    246254    CATCH_IF (result < 0)
    247255    {
    248         CF_Mutex_DestoryCtx (ctx);
     256        CF_Mutex_DestoryCtx ((CF_Mutex_Ctx) context);
    249257    }
    250258
    251     return CF_OK;
     259    return result;
    252260}
    253261
Note: See TracChangeset for help on using the changeset viewer.