Index: /trunk/include/cf_error.h
===================================================================
--- /trunk/include/cf_error.h	(revision 122)
+++ /trunk/include/cf_error.h	(revision 123)
@@ -69,4 +69,5 @@
 #define CF_ERROR_MUTEX_CREATE				CF_ERROR_MUTEX - 2
 #define CF_ERROR_MUTEX_INVALID_CTX			CF_ERROR_MUTEX - 3
+#define CF_ERROR_MUTEX_INVALID_ARGS			CF_ERROR_MUTEX - 4
 /* }}} mutex */
 
Index: /trunk/src/cf_log.c
===================================================================
--- /trunk/src/cf_log.c	(revision 122)
+++ /trunk/src/cf_log.c	(revision 123)
@@ -4,5 +4,5 @@
  * \author	vfire
  *
- * \brief 로그 구현
+ * \brief ·Î±× ±¸Çö
  */
 #if defined(_WIN32) || defined(_WIN64)
@@ -59,5 +59,5 @@
 #define LOG_DATETIME_LENGTH				sizeof ("0000-00-00 00:00:00.000") - 1
 
-/** 로그 컨텍스트 (Opaque) */
+/** ·Î±× ÄÁÅØ½ºÆ® (Opaque) */
 typedef void *	CF_Log_Ctx;
 
@@ -75,5 +75,5 @@
 } CF_LOG_DATETIME;
 
-/** 로그 컨텍스트 (CF_Log_Ctx의 구현) */
+/** ·Î±× ÄÁÅØ½ºÆ® (CF_Log_CtxÀÇ ±¸Çö) */
 typedef struct __cf_log_ctx__
 {
@@ -195,11 +195,11 @@
 
 /**
- * 로그 데이터 처리
- *
- * \return 성공 시, CF_OK; 실패 시, 오류 코드
- *
- * \param ctx			로그 컨텍스트
- * \param buffer		로그 데이터
- * \param demandSize	로그 데이터 길이
+ * ·Î±× µ¥ÀÌÅÍ Ã³¸®
+ *
+ * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
+ *
+ * \param ctx			·Î±× ÄÁÅØ½ºÆ®
+ * \param buffer		·Î±× µ¥ÀÌÅÍ
+ * \param demandSize	·Î±× µ¥ÀÌÅÍ ±æÀÌ
  *
  * \author vfire
@@ -212,5 +212,5 @@
 	int result = CF_OK;
 
-	if (ctx->size > 0) /* 버퍼단위 버퍼링.... */
+	if (ctx->size > 0) /* ¹öÆÛ´ÜÀ§ ¹öÆÛ¸µ.... */
 	{
 		size_t writeSize;
@@ -231,5 +231,5 @@
 		}
 	}
-	else /* flush되어야 함. */
+	else /* flushµÇ¾î¾ß ÇÔ. */
 	{
 		ctx->buffer = (char *)buffer;
@@ -243,9 +243,9 @@
 
 /**
- * 로그 컨텍스트에 멀티쓰레드 모드 설정
- *
- * \return 성공 시, CF_OK; 실패 시, 오류 코드 
- *
- * \param ctx 로그 컨텍스트
+ * ·Î±× ÄÁÅØ½ºÆ®¿¡ ¸ÖÆ¼¾²·¹µå ¸ðµå ¼³Á¤
+ *
+ * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå 
+ *
+ * \param ctx ·Î±× ÄÁÅØ½ºÆ®
  *
  * \see CF_Log_UnsetMultiThread
@@ -265,9 +265,9 @@
 
 /**
- * 로그 컨텍스트에 멀티쓰레드 모드 설정 해제
- *
- * \return 성공 시, CF_OK; 실패 시, 오류 코드 
- *
- * \param ctx 로그 컨텍스트
+ * ·Î±× ÄÁÅØ½ºÆ®¿¡ ¸ÖÆ¼¾²·¹µå ¸ðµå ¼³Á¤ ÇØÁ¦
+ *
+ * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå 
+ *
+ * \param ctx ·Î±× ÄÁÅØ½ºÆ®
  *
  * \see CF_Log_SetMultiThread
@@ -289,12 +289,12 @@
 
 /**
- * 로그 컨텍스트에 따라 로그 쓰기
- *
- * \return 성공 시, CF_OK; 실패 시, 오류 코드
- *
- * \param ctx		로그 컨텍스트
- * \param prefix	로그의 프리픽스 문자열
- * \param fmt		포맷 스트링
- * \param ...		가변 인자
+ * ·Î±× ÄÁÅØ½ºÆ®¿¡ µû¶ó ·Î±× ¾²±â
+ *
+ * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
+ *
+ * \param ctx		·Î±× ÄÁÅØ½ºÆ®
+ * \param prefix	·Î±×ÀÇ ÇÁ¸®ÇÈ½º ¹®ÀÚ¿­
+ * \param fmt		Æ÷¸Ë ½ºÆ®¸µ
+ * \param ...		°¡º¯ ÀÎÀÚ
  */
 static int
@@ -330,9 +330,9 @@
 
 /**
- * 로그 버퍼의 데이터를 즉시 로그 파일에 쓰기
- *
- * \return 성공 시, CF_OK; 실패 시, 오류 코드
- *
- * \param ctx 로그 컨텍스트
+ * ·Î±× ¹öÆÛÀÇ µ¥ÀÌÅÍ¸¦ Áï½Ã ·Î±× ÆÄÀÏ¿¡ ¾²±â
+ *
+ * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
+ *
+ * \param ctx ·Î±× ÄÁÅØ½ºÆ®
  */
 static int
@@ -351,9 +351,9 @@
 
 /**
- * 로그 컨텍스트 해제
- *
- * \return 성공 시, CF_OK; 실패 시, 오류 코드 
- *
- * \param ctx 로그 컨텍스트
+ * ·Î±× ÄÁÅØ½ºÆ® ÇØÁ¦
+ *
+ * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå 
+ *
+ * \param ctx ·Î±× ÄÁÅØ½ºÆ®
  */
 static int
@@ -381,11 +381,11 @@
 
 /**
- * 로그 컨텍스트 생성
- *
- * \return 성공 시, 로그 컨텍스트; 실패 시, NULL
- *
- * \param ctx		로그 컨텍스트 주소
- * \param path		로그 파일 경로
- * \param memsize	로그 버퍼 크기
+ * ·Î±× ÄÁÅØ½ºÆ® »ý¼º
+ *
+ * \return ¼º°ø ½Ã, ·Î±× ÄÁÅØ½ºÆ®; ½ÇÆÐ ½Ã, NULL
+ *
+ * \param ctx		·Î±× ÄÁÅØ½ºÆ® ÁÖ¼Ò
+ * \param path		·Î±× ÆÄÀÏ °æ·Î
+ * \param memsize	·Î±× ¹öÆÛ Å©±â
  *
  * \see CF_LOG_DEFAULT_BUFFER, CF_LOG_NO_BUFFER
@@ -446,13 +446,13 @@
 
 /**
- * 로그 컨텍스트에 아이디 넘버 할당<br />
- * 로그 기록 시, 아이디 넘버를 사용하면 해당 로그로 기록할 수 있음
- *
- * \return 성공 시, CF_OK; 실패 시, 오류 코드
- *
- * \param mapid	부여할 아이디 넘버
- * \param ctx	로그 컨텍스트
- *
- * \remarks 반드시 먼저 초기화 해야하며, 초기화 시에 주어진 번호보다 작은 아이디 넘버를 사용
+ * ·Î±× ÄÁÅØ½ºÆ®¿¡ ¾ÆÀÌµð ³Ñ¹ö ÇÒ´ç<br />
+ * ·Î±× ±â·Ï ½Ã, ¾ÆÀÌµð ³Ñ¹ö¸¦ »ç¿ëÇÏ¸é ÇØ´ç ·Î±×·Î ±â·ÏÇÒ ¼ö ÀÖÀ½
+ *
+ * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
+ *
+ * \param mapid	ºÎ¿©ÇÒ ¾ÆÀÌµð ³Ñ¹ö
+ * \param ctx	·Î±× ÄÁÅØ½ºÆ®
+ *
+ * \remarks ¹Ýµå½Ã ¸ÕÀú ÃÊ±âÈ­ ÇØ¾ßÇÏ¸ç, ÃÊ±âÈ­ ½Ã¿¡ ÁÖ¾îÁø ¹øÈ£º¸´Ù ÀÛÀº ¾ÆÀÌµð ³Ñ¹ö¸¦ »ç¿ë
  *
  * \see CF_LOG_OPEN, CF_Log_CreateCtx
@@ -472,11 +472,11 @@
 
 /**
- * 아이디 넘버에 해당하는 로그를 닫고 해당하는 컨텍스트를 해제
- *
- * \return 성공 시, CF_OK; 실패 시, 오류 코드
- *
- * \param mapid 로그의 아이디 넘버
- *
- * \remarks 아이디 넘버에 해당하는 컨텍스트가 해제되므로 주의
+ * ¾ÆÀÌµð ³Ñ¹ö¿¡ ÇØ´çÇÏ´Â ·Î±×¸¦ ´Ý°í ÇØ´çÇÏ´Â ÄÁÅØ½ºÆ®¸¦ ÇØÁ¦
+ *
+ * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
+ *
+ * \param mapid ·Î±×ÀÇ ¾ÆÀÌµð ³Ñ¹ö
+ *
+ * \remarks ¾ÆÀÌµð ³Ñ¹ö¿¡ ÇØ´çÇÏ´Â ÄÁÅØ½ºÆ®°¡ ÇØÁ¦µÇ¹Ç·Î ÁÖÀÇ
  *
  * \see CF_LOG_CLOSE, CF_Log_DestroyCtx
@@ -498,10 +498,10 @@
 
 /**
- * 아이디 넘버에 해당하는 로그 컨텍스트를 얻기
- *
- * \return 성공 시, CF_OK; 실패 시, 오류 코드
- *
- * \param mapid	로그의 아이디 넘버
- * \param ctx	로그 컨텍스트 받을 주소
+ * ¾ÆÀÌµð ³Ñ¹ö¿¡ ÇØ´çÇÏ´Â ·Î±× ÄÁÅØ½ºÆ®¸¦ ¾ò±â
+ *
+ * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
+ *
+ * \param mapid	·Î±×ÀÇ ¾ÆÀÌµð ³Ñ¹ö
+ * \param ctx	·Î±× ÄÁÅØ½ºÆ® ¹ÞÀ» ÁÖ¼Ò
  */
 static int
@@ -519,9 +519,9 @@
 
 /**
- * 로그를 사용하기 위해 초기화
- *
- * \return 성공 시, CF_OK; 실패 시, 오류 코드
- *
- * \param poolSize	로그 풀 크기로, 로그 아이디 넘버의 최대 값
+ * ·Î±×¸¦ »ç¿ëÇÏ±â À§ÇØ ÃÊ±âÈ­
+ *
+ * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
+ *
+ * \param poolSize	·Î±× Ç® Å©±â·Î, ·Î±× ¾ÆÀÌµð ³Ñ¹öÀÇ ÃÖ´ë °ª
  */
 int
@@ -543,7 +543,7 @@
 
 /**
- * 로그가 모두 사용된 후 자원 해제
- *
- * \return CF_OK 반환
+ * ·Î±×°¡ ¸ðµÎ »ç¿ëµÈ ÈÄ ÀÚ¿ø ÇØÁ¦
+ *
+ * \return CF_OK ¹ÝÈ¯
  */
 int
@@ -566,11 +566,11 @@
 
 /**
- * 로그 열기
- *
- * \return 성공 시, CF_OK; 실패 시, 오류 코드
- *
- * \param mapid		로그의 아이디 넘버
- * \param path		로그 파일 경로
- * \param memsize	로그 버퍼 크기
+ * ·Î±× ¿­±â
+ *
+ * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
+ *
+ * \param mapid		·Î±×ÀÇ ¾ÆÀÌµð ³Ñ¹ö
+ * \param path		·Î±× ÆÄÀÏ °æ·Î
+ * \param memsize	·Î±× ¹öÆÛ Å©±â
  *
  * \see CF_LOG_DEFAULT_BUFFER, CF_LOG_NO_BUFFER
@@ -596,9 +596,9 @@
 
 /**
- * 로그 닫기
- *
- * \return 성공 시, CF_OK; 실패 시, 오류 코드
- *
- * \param mapid 로그의 아이디 넘버
+ * ·Î±× ´Ý±â
+ *
+ * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
+ *
+ * \param mapid ·Î±×ÀÇ ¾ÆÀÌµð ³Ñ¹ö
  */
 int
@@ -609,9 +609,9 @@
 
 /**
- * 로그 버퍼의 데이터를 즉시 로그 파일에 쓰기
- *
- * \return 성공 시, CF_OK; 실패 시, 오류 코드
- *
- * \param mapid 로그의 아이디 넘버
+ * ·Î±× ¹öÆÛÀÇ µ¥ÀÌÅÍ¸¦ Áï½Ã ·Î±× ÆÄÀÏ¿¡ ¾²±â
+ *
+ * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
+ *
+ * \param mapid ·Î±×ÀÇ ¾ÆÀÌµð ³Ñ¹ö
  */
 int
@@ -631,10 +631,10 @@
 
 /**
- * 로그 컨텍스트에 멀티쓰레드 모드 설정
- *
- * \return 성공 시, CF_OK; 실패 시, 오류 코드 
- *
- * \param mapid	로그의 아이디 넘버
- * \param flag	설정/해제 bool 플래그
+ * ·Î±× ÄÁÅØ½ºÆ®¿¡ ¸ÖÆ¼¾²·¹µå ¸ðµå ¼³Á¤
+ *
+ * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå 
+ *
+ * \param mapid	·Î±×ÀÇ ¾ÆÀÌµð ³Ñ¹ö
+ * \param flag	¼³Á¤/ÇØÁ¦ bool ÇÃ·¡±×
  *
  * \see CF_BOOL
@@ -658,12 +658,12 @@
 
 /**
- * 로그 쓰기
- *
- * \return 성공 시, CF_OK; 실패 시, 오류 코드
- *
- * \param mapid		로그의 아이디 넘버
- * \param prefix	로그의 프리픽스 문자열
- * \param fmt		포맷 스트링
- * \param ...		가변 인자
+ * ·Î±× ¾²±â
+ *
+ * \return ¼º°ø ½Ã, CF_OK; ½ÇÆÐ ½Ã, ¿À·ù ÄÚµå
+ *
+ * \param mapid		·Î±×ÀÇ ¾ÆÀÌµð ³Ñ¹ö
+ * \param prefix	·Î±×ÀÇ ÇÁ¸®ÇÈ½º ¹®ÀÚ¿­
+ * \param fmt		Æ÷¸Ë ½ºÆ®¸µ
+ * \param ...		°¡º¯ ÀÎÀÚ
  */
 int
Index: /trunk/src/cf_thread.c
===================================================================
--- /trunk/src/cf_thread.c	(revision 122)
+++ /trunk/src/cf_thread.c	(revision 123)
@@ -52,4 +52,7 @@
 {
 #if defined(_WIN32) || defined(_WIN64)
+	if (tid == NULL)
+		return CF_ERROR_THREAD_INVALID_ARGS;
+
 	CloseHandle (tid);
 #endif
@@ -62,4 +65,7 @@
 {
 #if defined(_WIN32) || defined(_WIN64)
+	if (mid == NULL)
+		return CF_ERROR_MUTEX_INVALID_ARGS;
+
 	CloseHandle (mid);
 #else
@@ -230,5 +236,5 @@
 #if defined(_WIN32) || defined(_WIN64)
 		context->mid = CreateMutexA (NULL, FALSE, NULL);
-		if (*ctx == NULL)
+		if (context->mid == NULL)
 		{
 			result = CF_ERROR_MUTEX_CREATE;
@@ -243,11 +249,13 @@
 		}
 #endif
+
+		*ctx = context;
 	}
 	CATCH_IF (result < 0)
 	{
-		CF_Mutex_DestoryCtx (ctx);
+		CF_Mutex_DestoryCtx ((CF_Mutex_Ctx) context);
 	}
 
-	return CF_OK;
+	return result;
 }
 
