whatever happened to down_timeout()?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




There has been some discussion on lkml about a function that would either down a semaphore or else abort if it couldn't get the semaphore in a certain amount of time. Something along the lines of:

down_timeout(struct semaphore *sem, long timeout);


Does something like this exist? Does anyone have a working implementation? Does anyone see anything obviously wrong with the following version (that I loosely based on one by Rupert Eibauer)?



semaphore.h:

extern int __down_timeout(struct semaphore * sem, unsigned int timeout);


/* "timeout" is the number of jiffies to wait.
 * Returns -ETIME if timeout period expires.
 */
static inline int down_timeout(struct semaphore * sem, unsigned int timeout)
{
	int ret = down_trylock(sem);
	if (!ret)
		ret = __down_timeout(sem, timeout);
	return ret;
}




kernel/timer.c

int __down_timeout(struct semaphore * sem, int timeout)
{
	int ret;
	unsigned long expire;
	struct timer_list timer;

	expire = jiffies + timeout;
	init_timer(&timer);
	timer.expires = expire;
	timer.data = (unsigned long) current;
	timer.function = process_timeout;
	add_timer(&timer);

	ret = down_interruptible(sema);
	if (ret && (jiffies > expire))
		ret = -ETIME;
	 else
		del_timer_sync(&timer);

        return ret;
}


Thanks,
Chris
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux