I am working on building a threads library and for some reason have run into a simple malloc problem that I can't fix right now. I'm sure it's something simple I'm just missing it.
In my main.c I have the following code:
//declare testSem
tasem_t testSem;
int main(int argc, char **argv){
    ta_libinit();
    //initialize testSem
    ta_sem_init(&testSem, 5);
    //wait test
    ta_sem_wait(&testSem);
the relevant code in my thread library is as follows:
void ta_sem_init(tasem_t *sema, int value)
{
    //malloc the semaphore struct
    sema = malloc(sizeof(tasem_t));
    //error check
    if(sema == NULL)
    {
        printf("could not malloc semaphore");
        exit(0);
    }
    //initialize with the given value
    sema->val = value;
    printf("SemaVal = %i\n", sema->val);
}
void ta_sem_wait(tasem_t *sema)
{
    printf("SemaVal = %i\n", sema->val);
    if(sema->val <= 0)
    {
        //not done yet
        printf("SWAPPING\n");
    }
    else
    {
        printf("SemaVal = %i\n", sema->val);
        sema->val = sema->val + 1;
    }
}
Here is the struct from my header file:
//struct to store each semas info
typedef struct tasem_t_struct
{
    //value
    int val;
        //Q* Queue
        //int numThreads
}tasem_t;
The output I get from this is:
SemaVal = 5 SemaVal = 0 SWAPPING
So evidently, I'm not mallocing my struct correctly as the value inside is lost once I go out of scope. I know I must just be forgetting something simple. Any ideas?
 
     
    