Subversion Repositories HelenOS

Rev

Rev 3431 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3431 Rev 3597
Line 277... Line 277...
277
 * @param arg       Thread's implementing function argument.
277
 * @param arg       Thread's implementing function argument.
278
 * @param task      Task to which the thread belongs. The caller must
278
 * @param task      Task to which the thread belongs. The caller must
279
 *          guarantee that the task won't cease to exist during the
279
 *          guarantee that the task won't cease to exist during the
280
 *          call. The task's lock may not be held.
280
 *          call. The task's lock may not be held.
281
 * @param flags     Thread flags.
281
 * @param flags     Thread flags.
282
 * @param name      Symbolic name.
282
 * @param name      Symbolic name (a copy is made).
283
 * @param uncounted Thread's accounting doesn't affect accumulated task
283
 * @param uncounted Thread's accounting doesn't affect accumulated task
284
 *          accounting.
284
 *          accounting.
285
 *
285
 *
286
 * @return      New thread's structure on success, NULL on failure.
286
 * @return      New thread's structure on success, NULL on failure.
287
 *
287
 *
Line 314... Line 314...
314
    ipl = interrupts_disable();
314
    ipl = interrupts_disable();
315
    t->saved_context.ipl = interrupts_read();
315
    t->saved_context.ipl = interrupts_read();
316
    interrupts_restore(ipl);
316
    interrupts_restore(ipl);
317
   
317
   
318
    memcpy(t->name, name, THREAD_NAME_BUFLEN);
318
    memcpy(t->name, name, THREAD_NAME_BUFLEN);
-
 
319
    t->name[THREAD_NAME_BUFLEN - 1] = '\0';
319
   
320
   
320
    t->thread_code = func;
321
    t->thread_code = func;
321
    t->thread_arg = arg;
322
    t->thread_arg = arg;
322
    t->ticks = -1;
323
    t->ticks = -1;
323
    t->cycles = 0;
324
    t->cycles = 0;
Line 706... Line 707...
706
 
707
 
707
/** Process syscall to create new thread.
708
/** Process syscall to create new thread.
708
 *
709
 *
709
 */
710
 */
710
unative_t sys_thread_create(uspace_arg_t *uspace_uarg, char *uspace_name,
711
unative_t sys_thread_create(uspace_arg_t *uspace_uarg, char *uspace_name,
711
    thread_id_t *uspace_thread_id)
712
    size_t name_len, thread_id_t *uspace_thread_id)
712
{
713
{
713
    thread_t *t;
714
    thread_t *t;
714
    char namebuf[THREAD_NAME_BUFLEN];
715
    char namebuf[THREAD_NAME_BUFLEN];
715
    uspace_arg_t *kernel_uarg;
716
    uspace_arg_t *kernel_uarg;
716
    int rc;
717
    int rc;
717
 
718
 
-
 
719
    if (name_len > THREAD_NAME_BUFLEN - 1)
-
 
720
        name_len = THREAD_NAME_BUFLEN - 1;
-
 
721
 
718
    rc = copy_from_uspace(namebuf, uspace_name, THREAD_NAME_BUFLEN);
722
    rc = copy_from_uspace(namebuf, uspace_name, name_len);
719
    if (rc != 0)
723
    if (rc != 0)
720
        return (unative_t) rc;
724
        return (unative_t) rc;
721
 
725
 
-
 
726
    namebuf[name_len] = '\0';
-
 
727
 
722
    /*
728
    /*
723
     * In case of failure, kernel_uarg will be deallocated in this function.
729
     * In case of failure, kernel_uarg will be deallocated in this function.
724
     * In case of success, kernel_uarg will be freed in uinit().
730
     * In case of success, kernel_uarg will be freed in uinit().
725
     */
731
     */
726
    kernel_uarg = (uspace_arg_t *) malloc(sizeof(uspace_arg_t), 0);
732
    kernel_uarg = (uspace_arg_t *) malloc(sizeof(uspace_arg_t), 0);