www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 8960] New: DMD 2.061 git head: Unable to set thread priority

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8960

           Summary: DMD 2.061 git head: Unable to set thread priority
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: andrej.mitrovich gmail.com



21:37:40 PST ---
This has recently been recurring randomly in the autotester.

core.thread.ThreadException src/core/thread.d(982): Unable to set thread
priority

I don't know whether it's an issue with the test machines or druntime, but it's
becoming a problem since it's causing failed test runs for pull requests that
are unrelated to threading.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Nov 04 2012
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8960


Andrej Mitrovic <andrej.mitrovich gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |WORKSFORME



06:23:13 PST ---
Looks like it's not happening anymore? Oh well..

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Dec 23 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8960


Andrej Mitrovic <andrej.mitrovich gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
           See Also|                            |http://d.puremagic.com/issu
                   |                            |es/show_bug.cgi?id=9595
         Resolution|WORKSFORME                  |
            Summary|DMD 2.061 git head: Unable  |DMD tester: Unable to set
                   |to set thread priority      |thread priority



15:18:55 PST ---
It still happens randomly in every other pull request, so I'll have to reopen.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Feb 27 2013
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8960


Maxim Fomin <maxim maxim-fomin.ru> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |maxim maxim-fomin.ru



---
Reduced (compile with -unittest)
-------------------------------------
import std.parallelism;
import std.stdio;
import core.thread;

unittest
{
    static void refFun(ref uint num)
    {
        num++;
    }

    uint x;

    // Test executeInNewThread().
    auto ct = scopedTask!refFun(x);
    ct.executeInNewThread(Thread.PRIORITY_MAX);
    ct.yieldForce;
    assert(ct.args[0] == 1);


}

void main(){}
---------------------------------

According to observations it can fail in getter or in setter of thread
priority. It seems that return code from pthread setters/getters is 3 which is
ESRCH, which in pthread context means non-existing thread. Following snippet
from std.parallelism gives a clue:

    this(AbstractTask* task, int priority = int.max)
    {
        assert(task);

        // Dummy value, not used.
        instanceStartIndex = 0;

        this.isSingleTask = true;
        task.taskStatus = TaskStatus.inProgress;
        this.head = task;
        singleTaskThread = new Thread(&doSingleTask);
        singleTaskThread.start();

        if(priority != int.max)
        {
            singleTaskThread.priority = priority;
        }
    }

Thread may finish before setting priorities as it was started before applying
them. It seems that thread ID is same in three cases 1) before getter 2) before
setter 3) in gdb message informing that thread has finished. Originally I got
approx 1-2 per 100 executions but after inserting debug outputs the failure
percentage increased (as I suppose) because thread had more chances to
terminate before applying priorities. Also, there were cases when gdb reported
that thread has finished before priority setter started execution.

Can someone who uses FreeBSD check this?

https://github.com/mxfm/phobos/commit/50854c479e4d965271fbb91f9203d24ac81b6820

https://github.com/mxfm/druntime/commit/0d60b15efdaebae65ee9109ca3a90aaee177a341

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 11 2013
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8960


Maxim Fomin <maxim maxim-fomin.ru> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |pull
          Component|DMD                         |druntime



---
https://github.com/D-Programming-Language/druntime/pull/517

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 13 2013
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8960


Maxim Fomin <maxim maxim-fomin.ru> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bitworld qq.com



---
*** Issue 9595 has been marked as a duplicate of this issue. ***

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 13 2013