)]}'
{
  "commit": "ae236fb208a6fbbd2e7a6913385e8fb78ac807f8",
  "tree": "451b5798223b599434923a90243a94372d7c6cf1",
  "parents": [
    "31c82a2d9d51fccbb85cbd2be983eb115225301c"
  ],
  "author": {
    "name": "Jon Maloy",
    "email": "jon.maloy@ericsson.com",
    "time": "Fri Oct 13 11:04:25 2017 +0200"
  },
  "committer": {
    "name": "David S. Miller",
    "email": "davem@davemloft.net",
    "time": "Fri Oct 13 08:46:00 2017 -0700"
  },
  "message": "tipc: receive group membership events via member socket\n\nLike with any other service, group members\u0027 availability can be\nsubscribed for by connecting to be topology server. However, because\nthe events arrive via a different socket than the member socket, there\nis a real risk that membership events my arrive out of synch with the\nactual JOIN/LEAVE action. I.e., it is possible to receive the first\nmessages from a new member before the corresponding JOIN event arrives,\njust as it is possible to receive the last messages from a leaving\nmember after the LEAVE event has already been received.\n\nSince each member socket is internally also subscribing for membership\nevents, we now fix this problem by passing those events on to the user\nvia the member socket. We leverage the already present member synch-\nronization protocol to guarantee correct message/event order. An event\nis delivered to the user as an empty message where the two source\naddresses identify the new/lost member. Furthermore, we set the MSG_OOB\nbit in the message flags to mark it as an event. If the event is an\nindication about a member loss we also set the MSG_EOR bit, so it can\nbe distinguished from a member addition event.\n\nSigned-off-by: Jon Maloy \u003cjon.maloy@ericsson.com\u003e\nAcked-by: Ying Xue \u003cying.xue@windriver.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5f7b2c4a09ab86ab126ff9569f8b39639a9da1f3",
      "old_mode": 33188,
      "old_path": "include/uapi/linux/tipc.h",
      "new_id": "ef41c11a7f38cdc762fd04163868228c4fbc55ca",
      "new_mode": 33188,
      "new_path": "include/uapi/linux/tipc.h"
    },
    {
      "type": "modify",
      "old_id": "beb214a3420c1d02588c36b985ed6026f171a046",
      "old_mode": 33188,
      "old_path": "net/tipc/group.c",
      "new_id": "1bfa9348b26d3a1c77e4118ebf3caa634a766559",
      "new_mode": 33188,
      "new_path": "net/tipc/group.c"
    },
    {
      "type": "modify",
      "old_id": "9bdf4479fc0355618a8f9a0b189928d81ec08326",
      "old_mode": 33188,
      "old_path": "net/tipc/group.h",
      "new_id": "5d3f10d2896781bf56b60920ff5c9e85e7ba93ed",
      "new_mode": 33188,
      "new_path": "net/tipc/group.h"
    },
    {
      "type": "modify",
      "old_id": "e438716d23726f6803110788ee542e98f60c382e",
      "old_mode": 33188,
      "old_path": "net/tipc/msg.h",
      "new_id": "1b527b154e465eb300ffaac54dbdaffe9aaac76b",
      "new_mode": 33188,
      "new_path": "net/tipc/msg.h"
    },
    {
      "type": "modify",
      "old_id": "25ecf1201527e67f08fe50a39dcf351ac72501ae",
      "old_mode": 33188,
      "old_path": "net/tipc/socket.c",
      "new_id": "0a2eac309177975348fd9a837f4bb707e7e3599f",
      "new_mode": 33188,
      "new_path": "net/tipc/socket.c"
    }
  ]
}
