diff options
| author | Ed Schouten <ed@FreeBSD.org> | 2008-08-20 08:31:58 +0000 |
|---|---|---|
| committer | Ed Schouten <ed@FreeBSD.org> | 2008-08-20 08:31:58 +0000 |
| commit | bc093719ca478fe10b938cef32c30b528042cbcd (patch) | |
| tree | bd0c08a66997254385160ce71ea32029b99f99f9 /sys/kern/kern_resource.c | |
| parent | b14f19cf9742655c453d9c1dd672393c31080af4 (diff) | |
Notes
Diffstat (limited to 'sys/kern/kern_resource.c')
| -rw-r--r-- | sys/kern/kern_resource.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/sys/kern/kern_resource.c b/sys/kern/kern_resource.c index 8267c29b75d0..9a15319205e7 100644 --- a/sys/kern/kern_resource.c +++ b/sys/kern/kern_resource.c @@ -1329,3 +1329,28 @@ chgsbsize(uip, hiwat, to, max) *hiwat = to; return (1); } + +/* + * Change the count associated with number of pseudo-terminals + * a given user is using. When 'max' is 0, don't enforce a limit + */ +int +chgptscnt(uip, diff, max) + struct uidinfo *uip; + int diff; + rlim_t max; +{ + + /* Don't allow them to exceed max, but allow subtraction. */ + if (diff > 0 && max != 0) { + if (atomic_fetchadd_long(&uip->ui_ptscnt, (long)diff) + diff > max) { + atomic_subtract_long(&uip->ui_ptscnt, (long)diff); + return (0); + } + } else { + atomic_add_long(&uip->ui_ptscnt, (long)diff); + if (uip->ui_ptscnt < 0) + printf("negative ptscnt for uid = %d\n", uip->ui_uid); + } + return (1); +} |
