~oif-team/ubuntu/natty/qt4-x11/xi2.1

« back to all changes in this revision

Viewing changes to src/3rdparty/javascriptcore/JavaScriptCore/wtf/Threading.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Alessandro Ghersi
  • Date: 2009-11-02 18:30:08 UTC
  • mfrom: (1.2.2 upstream)
  • mto: (15.2.5 experimental)
  • mto: This revision was merged to the branch mainline in revision 88.
  • Revision ID: james.westby@ubuntu.com-20091102183008-b6a4gcs128mvfb3m
Tags: upstream-4.6.0~beta1
ImportĀ upstreamĀ versionĀ 4.6.0~beta1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2008, 2009 Apple Inc. All rights reserved.
 
3
 *
 
4
 * Redistribution and use in source and binary forms, with or without
 
5
 * modification, are permitted provided that the following conditions
 
6
 * are met:
 
7
 *
 
8
 * 1.  Redistributions of source code must retain the above copyright
 
9
 *     notice, this list of conditions and the following disclaimer. 
 
10
 * 2.  Redistributions in binary form must reproduce the above copyright
 
11
 *     notice, this list of conditions and the following disclaimer in the
 
12
 *     documentation and/or other materials provided with the distribution. 
 
13
 *
 
14
 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
 
15
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 
16
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 
17
 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
 
18
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 
19
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 
20
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 
21
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 
22
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 
23
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
24
 */
 
25
 
 
26
#include "config.h"
 
27
#include "Threading.h"
 
28
 
 
29
#include <string.h>
 
30
 
 
31
namespace WTF {
 
32
 
 
33
struct NewThreadContext : FastAllocBase {
 
34
    NewThreadContext(ThreadFunction entryPoint, void* data, const char* name)
 
35
        : entryPoint(entryPoint)
 
36
        , data(data)
 
37
        , name(name)
 
38
    {
 
39
    }
 
40
 
 
41
    ThreadFunction entryPoint;
 
42
    void* data;
 
43
    const char* name;
 
44
 
 
45
    Mutex creationMutex;
 
46
};
 
47
 
 
48
static void* threadEntryPoint(void* contextData)
 
49
{
 
50
    NewThreadContext* context = reinterpret_cast<NewThreadContext*>(contextData);
 
51
 
 
52
    setThreadNameInternal(context->name);
 
53
 
 
54
    // Block until our creating thread has completed any extra setup work
 
55
    {
 
56
        MutexLocker locker(context->creationMutex);
 
57
    }
 
58
 
 
59
    // Grab the info that we need out of the context, then deallocate it.
 
60
    ThreadFunction entryPoint = context->entryPoint;
 
61
    void* data = context->data;
 
62
    delete context;
 
63
 
 
64
    return entryPoint(data);
 
65
}
 
66
 
 
67
ThreadIdentifier createThread(ThreadFunction entryPoint, void* data, const char* name)
 
68
{
 
69
    // Visual Studio has a 31-character limit on thread names. Longer names will
 
70
    // be truncated silently, but we'd like callers to know about the limit.
 
71
#if !LOG_DISABLED
 
72
    if (strlen(name) > 31)
 
73
        LOG_ERROR("Thread name \"%s\" is longer than 31 characters and will be truncated by Visual Studio", name);
 
74
#endif
 
75
 
 
76
    NewThreadContext* context = new NewThreadContext(entryPoint, data, name);
 
77
 
 
78
    // Prevent the thread body from executing until we've established the thread identifier
 
79
    MutexLocker locker(context->creationMutex);
 
80
 
 
81
    return createThreadInternal(threadEntryPoint, context, name);
 
82
}
 
83
 
 
84
#if PLATFORM(MAC) || PLATFORM(WIN)
 
85
 
 
86
// This function is deprecated but needs to be kept around for backward
 
87
// compatibility. Use the 3-argument version of createThread above.
 
88
 
 
89
ThreadIdentifier createThread(ThreadFunction entryPoint, void* data);
 
90
 
 
91
ThreadIdentifier createThread(ThreadFunction entryPoint, void* data)
 
92
{
 
93
    return createThread(entryPoint, data, 0);
 
94
}
 
95
#endif
 
96
 
 
97
} // namespace WTF