All of lore.kernel.org
 help / color / mirror / Atom feed
From: Russell Leighton <russ@elegant-software.com>
To: Robert Love <rml@ximian.com>
Cc: Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: Using getpid() often, another way? [was Re: clone() <->	getpid() bug in 2.6?]
Date: Sun, 06 Jun 2004 20:20:54 -0400	[thread overview]
Message-ID: <40C3B4E6.8020809@elegant-software.com> (raw)
In-Reply-To: <1086536650.2804.20.camel@localhost>


Ah, the stack. Yes, I think that will work. You see, the functions that 
need this test
always take a pointer to a struct that holds all the thread info called 
'mon'. That info is the pid of the
thread , the ptr to the stack mmap'd and the size of the stack, I think 
I can change the test to:

{
   int32_t
     stackvar;

    /* if address of the stackvar is OUTSIDE the stack of handler 
thread, then
         you are not running this function from the handler thread */
   if ( &stackvar < mon->handler_q.thread->stack ||
         &stackvar > mon->handler_q.thread->stack + 
mon->handler_q.thread->stacksize - 1) {

        fprintf(stderr, "bad, bad, bad!\n");
        exit(-1);

    }

}

Would that work? If so, that is nice because no syscall.

Robert Love wrote:

>On Sun, 2004-06-06 at 11:38 -0400, Russell Leighton wrote:
>
>  
>
>>  Given a code library with some exported functions which CAN be 
>>executed outside a particular thread and others that MUST be executed in 
>>a particular thread, how can I efficiently prevent or trap using of 
>>these functions outside the proper execution context?
>>    
>>
>
>Are you sure you cannot use pthreads?  The new implementation (NPTL) has
>a lot of improvements, including saner signal handling behavior.
>
>If not, you probably are out of luck.  Best I can think of is somehow
>using thread-specific storage, but you would obviously need to index
>into it using something OTHER than the PID.  Which basically leaves you
>with the stack.  So, unless you could cache the PID in a local
>variable..
>
>  
>
>> Would gettid() be any better?
>>    
>>
>
>If you aren't using CLONE_THREAD, gettid() will just return the PID.
>And if you were using CLONE_THREAD, then getpid() would be worthless for
>you and you would have to use gettid().  Either way, though, they
>basically do the same thing (return current->tid vs. current->pid).
>
>	Robert Love
>
>
>-
>To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>the body of a message to majordomo@vger.kernel.org
>More majordomo info at  http://vger.kernel.org/majordomo-info.html
>Please read the FAQ at  http://www.tux.org/lkml/
>
>
>  
>


  reply	other threads:[~2004-06-07  0:17 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-06-05 15:28 clone() <-> getpid() bug in 2.6? Russell Leighton
2004-06-05 20:45 ` Linus Torvalds
2004-06-05 20:55   ` Arjan van de Ven
2004-06-05 21:13     ` Linus Torvalds
2004-06-05 21:48       ` Robert Love
2004-06-05 22:44         ` Linus Torvalds
2004-06-05 21:53     ` Chris Wedgwood
2004-06-05 22:47       ` Robert Love
2004-06-05 22:57         ` David S. Miller
2004-06-05 23:01         ` Linus Torvalds
2004-06-05 23:07         ` Davide Libenzi
2004-06-05 23:18           ` Linus Torvalds
2004-06-05 23:26             ` Davide Libenzi
2004-06-06  5:08             ` Kalin KOZHUHAROV
2004-06-06  5:13               ` Chris Wedgwood
2004-06-06  5:34                 ` Kalin KOZHUHAROV
2004-06-06  6:07               ` Linus Torvalds
2004-06-06  6:43                 ` Kalin KOZHUHAROV
2004-06-06  7:57                 ` Erik Andersen
2004-06-06 16:57                   ` Linus Torvalds
2004-06-06 18:53                     ` Simon Kirby
2004-06-06 19:00                       ` Linus Torvalds
2004-06-06  9:52                 ` Bernd Eckenfels
2004-06-06 13:07                   ` Paul Rolland
2004-06-06 17:20                     ` Patrick J. LoPresti
2004-06-06 17:31                       ` Paul Rolland
2004-06-06 17:43                       ` Davide Libenzi
2004-06-06 18:17                       ` Rik van Riel
2004-06-06 18:37                         ` Patrick J. LoPresti
2004-06-06 16:33                 ` chris
     [not found]                 ` <200406062022.54320.vda@port.imtp.ilyichevsk.odessa.ua>
2004-06-06 17:55                   ` Linus Torvalds
2004-06-07 18:20                 ` Bruce Guenter
2004-06-08 11:06                   ` Kalin KOZHUHAROV
2004-06-05 23:19           ` Robert Love
2004-06-06 14:29   ` Russell Leighton
2004-06-06 15:38     ` Using getpid() often, another way? [was Re: clone() <-> getpid() bug in 2.6?] Russell Leighton
2004-06-06 15:44       ` Robert Love
2004-06-07  0:20         ` Russell Leighton [this message]
2004-06-06 15:58       ` Arjan van de Ven
2004-06-06 23:49         ` Russell Leighton
2004-06-07 12:13           ` Arjan van de Ven
2004-06-07 13:48             ` Sean Neakums
2004-06-07 14:00               ` Christoph Hellwig
2004-06-07 14:10                 ` Sean Neakums
2004-06-07 18:42                 ` David Mosberger
2004-06-07 23:02                   ` Russell Leighton
2004-06-07 23:27                     ` David Mosberger
2004-06-08  6:01                     ` Arjan van de Ven
2004-06-08  9:48                       ` Eric W. Biederman
2004-06-07  0:09         ` Russell Leighton
2004-06-07 12:20           ` Arjan van de Ven
2004-06-06 17:19       ` Linus Torvalds
2004-06-12  9:15         ` Dominik Straßer
2004-06-12 13:47           ` Linus Torvalds

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=40C3B4E6.8020809@elegant-software.com \
    --to=russ@elegant-software.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rml@ximian.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.