Yeah that's basically it.  The driver manages the thread pool, to make sure
there will always be a thread available (up to a maximum number of threads)
to handle work from it.

On Sun, Jan 4, 2009 at 3:24 AM, gan <[email protected]> wrote:

>
> Dianne, Thanks:-)
>
> I add some log, and make sure
> BR_SPAWN_LOOPER
> cause all the spawn of second and later "Binder Thread"(which isMain
> is false) display by "ps -p -t"
>
> Seems BR_SPAWN_LOOPER is created in binder driver:
> in kernel/include/linux/binder.h
> I found following comments:
>        BR_SPAWN_LOOPER = _IO('r', 13),
>        /*
>         * No parameters.  The driver has determined that a process has no
>         * threads waiting to service incomming transactions.  When a
> process
>         * receives this command, it must spawn a new service thread and
>         * register it via bcENTER_LOOPER.
>         */
>
> I guess
> "The driver has determined that a process has no threads waiting to
> service incomming transactions"
> means old "Binder Thread" can't be used, then the driver think this
> process has no thread "waiting to service incomming transactions"
> Then it want that process to create a new "Binder Thread".
>
> Is there something wrong with my though?
>
> Thanks&BstRgds
> gan
>
>
> On Jan 4, 4:52 pm, "Dianne Hackborn" <[email protected]> wrote:
> > Yeah the only difference is that when the flag is set we don't allow that
> > thread to exit like a normal thread pool thread (created for that
> purpose),
> > since exiting the main thread of the process is not desirable. :)
> >
> >
> >
> >
> >
> > On Sun, Jan 4, 2009 at 12:20 AM, gan <[email protected]> wrote:
> >
> > > Hi, Dianne: Thanks!
> >
> > > This question sent is because I set a log at
> > > ProcessState::spawnPooledThread(bool isMain)
> > > Found only the first calling of this API, "isMain" is true;
> >
> > > I found this flag only be used at following case in
> > > IPCThreadState::joinThreadPool:
> > >        if(result == TIMED_OUT && !isMain) {
> > >            break;
> > >        }
> >
> > > It is true that the different of them(isMain is true or false) is
> > > small,
> >
> > > From the log:
> > > ProcessState::spawnPooledThread(false)
> > > is called(from the log, only first calling of this API within one
> > > process, isMain is true, later, it would always be false),
> >
> > > I guess it is called at IPCThreadState::executeCommand:
> > >    case BR_SPAWN_LOOPER:
> > >        mProcess->spawnPooledThread(false);
> > >    break;
> >
> > > So I not sure in what scenario BR_SPAWN_LOOPER is used?
> >
> > > Thanks&BstRgds
> > > gan
> >
> > > On Jan 4, 3:27 pm, "Dianne Hackborn" <[email protected]> wrote:
> > > > I don't know what you mean by a "NONEMain Binder Thread," but each
> > > process
> > > > using the Binder will have multiple threads running in a thread pool
> to
> > > > process incoming transactions and other work.
> >
> > > > Also there is no strong rule about the main thread ending up in the
> > > thread
> > > > pool (and nothing really special about that thread if it does go into
> the
> > > > thread pool vs. any of the other spawned threads); in fact for normal
> app
> > > > processes the main thread sits in the Java Looper class processing
> the
> > > main
> > > > message queue of the process.
> >
> > > > The system process is a little different, in that I believe the main
> > > thread
> > > > gets put into the binder thread pool, and another thread is created
> and
> > > runs
> > > > what serves as the main message queue/loop of the process, but it is
> > > really
> > > > only done this way due to convenience of implementation.
> >
> > > > On Sat, Jan 3, 2009 at 11:08 PM, gan <[email protected]> wrote:
> >
> > > > > Hi:
> >
> > > > > When I use "ps -p -t" to get the process and thread information, I
> > > > > ofter found many "Binder Thread" belong to one Process.
> >
> > > > > My understanding is:
> > > > > Only one "Binder Thread" is the "main Binder Thread" of that
> process.
> > > > > It would be blocked in  ioctl used for "waiting to read".  (later
> to
> > > > > execute some command by "BnXXXX::onTransact" according to read
> > > > > contents. )
> > > > > And it would be wake up by ioctl "writing" invoked by another
> > > > > process's BpBinder::transact.
> >
> > > > > I found
> > > > > /*spawn a new thread if we leave this out */
> > > > > at the end of binder_thread_read.
> >
> > > > > My question is:
> > > > > What the "NONEMain Binder Thread" used for?
> > > > > Why new thread spawned?
> > > > > What is it's relationship with old "main binder thread"?
> >
> > > > > Thanks&BstRgds
> > > > > gan
> >
> > > > --
> > > > Dianne Hackborn
> > > > Android framework engineer
> > > > [email protected]
> >
> > > > Note: please don't send private questions to me, as I don't have time
> to
> > > > provide private support.  All such questions should be posted on
> public
> > > > forums, where I and others can see and answer them.
> >
> > --
> > Dianne Hackborn
> > Android framework engineer
> > [email protected]
> >
> > Note: please don't send private questions to me, as I don't have time to
> > provide private support.  All such questions should be posted on public
> > forums, where I and others can see and answer them.
> >
>


-- 
Dianne Hackborn
Android framework engineer
[email protected]

Note: please don't send private questions to me, as I don't have time to
provide private support.  All such questions should be posted on public
forums, where I and others can see and answer them.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"android-framework" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/android-framework?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to