Skip to content

Commit

Permalink
erts: Extend erl_driver interface with lock names
Browse files Browse the repository at this point in the history
Lock and thread names are already a feature in the driver interface.
This extension will let developers read these names. Eases debugging.
  • Loading branch information
psyeugenic committed Jul 24, 2013
1 parent a938fc9 commit 2bf2449
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 3 deletions.
8 changes: 5 additions & 3 deletions erts/emulator/beam/erl_driver.h
Original file line number Diff line number Diff line change
Expand Up @@ -546,6 +546,11 @@ EXTERN int erl_drv_equal_tids(ErlDrvTid tid1, ErlDrvTid tid2);
EXTERN void erl_drv_thread_exit(void *resp);
EXTERN int erl_drv_thread_join(ErlDrvTid, void **respp);

EXTERN char* erl_drv_mutex_name(ErlDrvMutex *mtx);
EXTERN char* erl_drv_cond_name(ErlDrvCond *cnd);
EXTERN char* erl_drv_rwlock_name(ErlDrvRWLock *rwlck);
EXTERN char* erl_drv_thread_name(ErlDrvTid tid);

/*
* Misc.
*/
Expand Down Expand Up @@ -681,6 +686,3 @@ EXTERN int erl_drv_getenv(char *key, char *value, size_t *value_size);

/* also in global.h, but driver's can't include global.h */
void dtrace_drvport_str(ErlDrvPort port, char *port_buf);



42 changes: 42 additions & 0 deletions erts/emulator/beam/erl_drv_thread.c
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,17 @@ erl_drv_mutex_destroy(ErlDrvMutex *dmtx)
#endif
}


char *
erl_drv_mutex_name(ErlDrvMutex *dmtx)
{
#ifdef USE_THREADS
return dmtx ? dmtx->name : NULL;
#else
return NULL;
#endif
}

int
erl_drv_mutex_trylock(ErlDrvMutex *dmtx)
{
Expand Down Expand Up @@ -258,6 +269,15 @@ erl_drv_cond_destroy(ErlDrvCond *dcnd)
#endif
}

char *
erl_drv_cond_name(ErlDrvCond *dcnd)
{
#ifdef USE_THREADS
return dcnd ? dcnd->name : NULL;
#else
return NULL;
#endif
}

void
erl_drv_cond_signal(ErlDrvCond *dcnd)
Expand Down Expand Up @@ -331,6 +351,16 @@ erl_drv_rwlock_destroy(ErlDrvRWLock *drwlck)
#endif
}

char *
erl_drv_rwlock_name(ErlDrvRWLock *drwlck)
{
#ifdef USE_THREADS
return drwlck ? drwlck->name : NULL;
#else
return NULL;
#endif
}

int
erl_drv_rwlock_tryrlock(ErlDrvRWLock *drwlck)
{
Expand Down Expand Up @@ -617,6 +647,18 @@ erl_drv_thread_create(char *name,
#endif
}

char *
erl_drv_thread_name(ErlDrvTid tid)
{
#ifdef USE_THREADS
struct ErlDrvTid_ *dtid = (struct ErlDrvTid_ *) tid;
return dtid ? dtid->name : NULL;
#else
return NULL;
#endif
}


ErlDrvTid
erl_drv_thread_self(void)
{
Expand Down

0 comments on commit 2bf2449

Please sign in to comment.