Giter Club home page Giter Club logo

Comments (6)

katyakats avatar katyakats commented on June 27, 2024

Hi,
xio_mempool_alloc and xio_mempool_free are thread safe. xio_mempool_add_slab is not thread safe.
Katya

from accelio.

reyoung avatar reyoung commented on June 27, 2024

However, I test mempool to alloc very tiny message in a very small slab grow number will cause segment fault.

The whole code like this.

#include <libxio.h>
#include <pthread.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>

const  size_t thread_cnt = 10;
const  size_t alloc_size_limit=256;
const  size_t iteration_cnt = 100000;

void * test_mempool(void* pool_) {
  struct xio_mempool* mempool = (struct xio_mempool*)(pool_);
  size_t i;
  size_t alloc_size;
  int retv;
  struct xio_reg_mem obj;

  for(i=0; i<iteration_cnt; ++i) {
    alloc_size = rand() % alloc_size_limit +1;
    retv = xio_mempool_alloc(mempool, alloc_size, &obj);
    assert(retv == 0);
    *(char *)(obj.addr) = '1';
    xio_mempool_free(&obj);
  }

  return NULL;
}


int main(){
  size_t i;
  struct xio_mempool* mempool;
  pthread_t threads[thread_cnt];
  void* status;
  srand(time(0));
  xio_init();

  mempool = xio_mempool_create(-1, 
    XIO_MEMPOOL_FLAG_REG_MR|XIO_MEMPOOL_FLAG_USE_SMALLEST_SLAB);

  xio_mempool_add_slab(mempool, alloc_size_limit*1.2d, 1, 1<<30, 1, 0);


  for (i=0; i<thread_cnt; ++i) {
    pthread_create(&threads[i], NULL, test_mempool, mempool);
  }

  for (i=0; i<thread_cnt; ++i) {
    pthread_join(threads[i], &status);
  }

  xio_shutdown();
  return 0;
}

The xio_mempool_alloc will get NULL address but return 0, like gdb shows
err

I compile accelio only for tcp mode, static link, use gcc 4.6.

from accelio.

katyakats avatar katyakats commented on June 27, 2024

Hi,
I was able to reproduce the bug. I will investigate and let you know once I have a fix.
Thanks,
Katya

from accelio.

reyoung avatar reyoung commented on June 27, 2024

Please reopen this issue so I can track this easily.

from accelio.

katyakats avatar katyakats commented on June 27, 2024

Hi,
The fix is in the for_next branch. Bug was not related to the multithread but to the alloc_nr=1.
Thanks a lot for reporting it.
Katya

from accelio.

reyoung avatar reyoung commented on June 27, 2024

Thank you fro quick response.

from accelio.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.