ERROR (thread.c,225): Keine Berechtigung

Message ID 20090408154158.mbv7qx7cmcs8wg8w@sohoserver.homelinux.net
State New
Headers

Commit Message

Gerald Dachs April 8, 2009, 1:41 p.m. UTC
  On every start of the vdr I get this error message:
  Apr 2 00:33:36 vdr vdr: [2462] ERROR (thread.c,225): Keine Berechtigung
It comes from cThread::SetPriority and seems to be harmless, but annoying.
Is the attached patch the right cure?

Gerald


----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.
  

Comments

Udo Richter April 10, 2009, 10:28 a.m. UTC | #1
On 08.04.2009 15:41, Gerald Dachs wrote:
> On every start of the vdr I get this error message:
>    Apr 2 00:33:36 vdr vdr: [2462] ERROR (thread.c,225): Keine Berechtigung
> It comes from cThread::SetPriority and seems to be harmless, but annoying.
> Is the attached patch the right cure?
>
>    void cThread::SetPriority(int Priority)
>    {
> -  if (setpriority(PRIO_PROCESS, 0, Priority)<  0)
> +  if (setpriority(PRIO_PROCESS, getuid(), Priority)<  0)
>         LOG_ERROR;
>    }

This is definitely wrong. setpriority expects a process ID together with 
PRIO_PROCESS, not an user ID. You could try to use getpid() instead. 
However, passing 0 as second parameter is officially allowed and is 
interpreted as the current process too.

The cause is more likely that the process is not allowed to set the 
requested priority. To investigate this, you can dump the old and new 
priority value to the log files. Looks something like this: (untested)

dsyslog("%s thread setpriority %i to %i", Thread->description, 
getpriority(PRIO_PROCESS, 0), Priority);


Cheers,

Udo
  
Gerald Dachs April 10, 2009, 3:32 p.m. UTC | #2
Am Fri, 10 Apr 2009 12:28:35 +0200
schrieb Udo Richter <udo_richter@gmx.de>:

> On 08.04.2009 15:41, Gerald Dachs wrote:
> > On every start of the vdr I get this error message:
> >    Apr 2 00:33:36 vdr vdr: [2462] ERROR (thread.c,225): Keine
> > Berechtigung It comes from cThread::SetPriority and seems to be
> > harmless, but annoying. Is the attached patch the right cure?
> >
> >    void cThread::SetPriority(int Priority)
> >    {
> > -  if (setpriority(PRIO_PROCESS, 0, Priority)<  0)
> > +  if (setpriority(PRIO_PROCESS, getuid(), Priority)<  0)
> >         LOG_ERROR;
> >    }
> 
> This is definitely wrong. setpriority expects a process ID together
> with PRIO_PROCESS, not an user ID.

Oh yes, you are right, I didn't read the man page careful enough,
sorry. getuid() makes only sense with PRIO_USER.

Gerald
  
Rolf Ahrenberg April 10, 2009, 4:25 p.m. UTC | #3
On Wed, 8 Apr 2009, Gerald Dachs wrote:

> On every start of the vdr I get this error message:
>  Apr 2 00:33:36 vdr vdr: [2462] ERROR (thread.c,225): Keine Berechtigung
> It comes from cThread::SetPriority and seems to be harmless, but annoying.
> Is the attached patch the right cure?

I've solved this by tweaking the capabilities.

google: vdr-1.6.0-cap_sys_nice.patch

BR,
--
rofa
  

Patch

--- vdr-1.6.0/thread.c.orig     2009-04-08 15:33:52.000000000 +0200
+++ vdr-1.6.0/thread.c  2009-04-08 15:34:22.000000000 +0200
@@ -220,7 +220,7 @@ 

  void cThread::SetPriority(int Priority)
  {
-  if (setpriority(PRIO_PROCESS, 0, Priority) < 0)
+  if (setpriority(PRIO_PROCESS, getuid(), Priority) < 0)
       LOG_ERROR;
  }