# 참조 하나를 내려놓고 마지막 사용자인지 확인합니다

v6.18.37 / include/linux/refcount.h

공유 객체를 한 사용자가 다 썼다고 바로 해제하면 다른 사용자가 해제된 메모리에 접근할 수 있습니다. refcount는 남은 사용자를 세며, 0으로 바뀐 실행 흐름이 마지막 참조 해제를 맡도록 돕습니다. 포인터를 안전하게 얻는 방법까지 자동으로 해결해 주는 것은 아닙니다.

## __refcount_dec_and_test

```c

static inline __must_check bool __refcount_dec_and_test(refcount_t *r, int *oldp)
{
	return __refcount_sub_and_test(1, r, oldp);
}

```

### 430행

```c

static inline __must_check bool __refcount_dec_and_test(refcount_t *r, int *oldp)

```

r의 참조를 하나 내려놓고 마지막 참조인지 bool로 반환하는 얇은 래퍼입니다. __must_check는 반환값을 무시한 호출에 컴파일러가 경고하도록 하며 oldp가 NULL이 아니면 공통 구현이 이전 값을 기록합니다.

### 432행

```c

	return __refcount_sub_and_test(1, r, oldp);

```

감소량 1, 대상 r와 선택적 이전값 출력 oldp를 공통 구현에 넘깁니다. 정상적으로 1에서 0이 된 경우 true를 돌려주며, 객체를 직접 해제하지는 않습니다. release 순서와 성공 시 acquire 순서는 이 하위 함수가 담당합니다.

