The motivation for using this code in Asterisk is for situations where storing data on a thread-specific basis can provide some amount of performance benefit. For example, there are some call types in Asterisk where ast_frame structures must be allocated very rapidly (easily 50, 100, 200 times a second). Instead of doing the equivalent of that many calls to malloc() and free() per second, thread local storage is used to keep a list of unused frame structures so that they can be continuously reused.